获取group by platform和semver的两条最新记录
Posted
技术标签:
【中文标题】获取group by platform和semver的两条最新记录【英文标题】:Grab two latest records of group by platform and semver 【发布时间】:2020-08-11 04:35:42 【问题描述】:对于platform
和semver
的每一对,我都试图获得第二条最新记录,以此来支持以前的应用程序版本到最新版本。
这是我的架构:
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[];
感谢任何帮助!
【问题讨论】:
【参考方案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
【讨论】:
以上是关于获取group by platform和semver的两条最新记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 GROUP BY 和 ORDER BY pl/sql 获取结果集的 N 到 M 行 [重复]