获取数据表中各test_id对应最新记录的SQL改写需求
解决方案:获取每个test_id的最新记录
针对你的需求,我们可以用**窗口函数ROW_NUMBER()**来实现,这个方法完全不需要对text类型的字段使用聚合函数,完美适配你的场景。
修改后的SQL语句:
SELECT r.time_stamp, r.result, r.note, t.test FROM ( SELECT results.*, ROW_NUMBER() OVER (PARTITION BY results.test_id ORDER BY results.time_stamp DESC) AS rn FROM results ) r INNER JOIN tests t ON r.test_id = t.id WHERE r.rn = 1;
代码逻辑说明:
- 子查询中通过
ROW_NUMBER()函数给每条记录标记行号:PARTITION BY results.test_id:将results表按test_id拆分成独立的分组ORDER BY results.time_stamp DESC:每个分组内按时间戳从新到旧排序,最新的记录会被标记为行号rn=1
- 外层查询只筛选行号为1的记录,再和
tests表关联,就能得到每个test_id对应的最新行,同时完整保留所有需要的字段(包括text类型的note和test)
这样就能精准满足你的需求啦!
内容的提问来源于stack exchange,提问作者Martin Sitarčík
相关产品推荐
相关产品推荐

