如何在SQL查询中获取特定筛选条件下的最后一条匹配记录
解决方案
方法1:使用MAX聚合函数(最通用,仅需获取最新日期时优先使用)
所有主流SQL数据库均支持该写法,直接返回符合筛选条件的最大(即最新)日期值:
SELECT MAX(date) FROM msr_history WHERE pos = 'DV' AND msr_id = 177;
方法2:排序+结果限制(需要获取最新日期对应的整条记录时使用)
从你的示例提示符pigc=#判断你使用的是PostgreSQL数据库,可通过按日期倒序排序后取第一条的方式实现,如果你后续需要同时查询该条记录的其他字段,直接修改SELECT后的字段列表即可:
SELECT date FROM msr_history WHERE pos = 'DV' AND msr_id = 177 ORDER BY date DESC LIMIT 1;
如果你使用的是MySQL,写法和上面完全一致;如果是SQL Server,将LIMIT 1替换为TOP 1放在SELECT后即可;如果是Oracle,可在末尾添加AND ROWNUM = 1实现。
方法3:窗口函数(多分组批量查询各组最新记录时使用)
如果你需要同时查询多个pos、msr_id对应的各自最新记录,使用窗口函数的方案更高效:
SELECT date, pos, msr_id FROM ( SELECT date, pos, msr_id, ROW_NUMBER() OVER (PARTITION BY pos, msr_id ORDER BY date DESC) AS rn FROM msr_history ) t WHERE rn = 1 -- 可根据需求调整筛选条件,不加pos和msr_id筛选则返回所有分组的最新记录 AND pos = 'DV' AND msr_id = 177;
内容的提问来源于stack exchange,提问作者matthew fabrie
相关产品推荐
相关产品推荐

