如何编写PostgreSQL查询获取每个id对应最大last_track的整行数据
解法1:使用PostgreSQL特有的DISTINCT ON语法(推荐,性能最优)
这是PostgreSQL针对分组取首行场景做过专门优化的原生语法,写法简洁执行效率高:
SELECT DISTINCT ON (id) id, model, lat, lng, alt, last_track FROM 请替换为你的实际表名 ORDER BY id, last_track DESC;
逻辑说明:DISTINCT ON (id)会保留每个id分组的第一条返回记录,ORDER BY先按id分组排序,再按last_track倒序排列,因此每个id的第一条记录就是last_track值最大的整行数据,完全匹配你要的输出结果。
解法2:使用标准窗口函数(通用写法,适配所有支持窗口函数的数据库)
如果你需要跨数据库兼容,可以用ROW_NUMBER()窗口函数实现相同逻辑:
WITH ranked_records AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY last_track DESC) AS rank_num FROM 请替换为你的实际表名 ) SELECT id, model, lat, lng, alt, last_track FROM ranked_records WHERE rank_num = 1;
逻辑说明:先给每个id分组内的所有记录按last_track倒序排名,筛选排名为1的记录即可得到每个id对应last_track最大的整行数据。
内容的提问来源于stack exchange,提问作者Haydar
相关产品推荐
相关产品推荐

