【问题标题】:Grab two latest records of group by platform and semver获取group by platform和semver的两条最新记录
【发布时间】:2020-08-11 04:35:42
【问题描述】:

对于platformsemver 的每一对,我都试图获得第二条最新记录,以此来支持以前的应用程序版本到最新版本。

这是我的架构:

id, platform, semver, name

一些样本数据:

我希望查询返回:

papapal, ios,     1.0.2
papapal, android, 1.0.2
foobar,  ios,     1.4.0
foobar,  android, 1.4.0

注意它不是最新的记录,而是第二个最新的记录。

我可以使用 semver 进行排序,但是每个应用程序的第二个最新内容让我感到困惑。

SELECT id, semver
FROM   app_versions
ORDER  BY string_to_array(semver, '.')::int[];

感谢任何帮助!

【问题讨论】:

    标签: sql postgresql select greatest-n-per-group psql


    【解决方案1】:

    如果点之间的数字总是只有一位,您可以使用如下窗口函数:

    select platform, name, semver
    from (
        select
            t.*,
            row_number() over(partition by platform, name order by semver desc) rn
        from mytable t
    ) t
    where rn = 2
    

    另一方面,如果您有像'1.12.2' 这样的版本号(大于'1.2.1'),那么您确实可以将它们转换为整数数组进行排序:

    select platform, name, semver
    from (
        select
            t.*,
            row_number() over(partition by platform, name order by string_to_array(semver, '.')::int[] desc) rn
        from mytable t
    ) t
    where rn = 2
    

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2021-01-20
      • 2013-01-07
      相关资源
      最近更新 更多