关于按ID获取最大日期并去除重复数据的SQL问询
解决SQL去重并按id取最大date的问题
嘿,我来帮你把这个SQL语句补全并优化一下~
首先看你原来的语句,有几个小问题需要修正:
- 子查询里把字段名
date写成data了,应该是MAX(date) - 连接条件里的
tt.data也写错了,要改成tt.date - 最后连接条件的结尾没写完,应该是
groupedtt.lastDate
修正后的基础版本SQL
这个版本会找出每个id对应的最大date的所有记录(如果有重复的相同id+max date的记录,会全部返回):
SELECT tt.* FROM data tt INNER JOIN ( SELECT id, MAX(date) AS lastDate FROM data GROUP BY id ) groupedtt ON tt.id = groupedtt.id AND tt.date = groupedtt.lastDate;
更稳妥的去重版本(确保每个id只返回一条)
如果你的需求是每个id只保留一条最大date的记录,哪怕有多个相同的max date,用窗口函数会更可靠:
SELECT id, date FROM ( SELECT id, date, -- 按id分组,每组内按date倒序排,给每条记录标序号 ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn FROM data ) t -- 只取每组的第一条(也就是date最大的那条) WHERE rn = 1;
这个窗口函数的方法不仅能自动去除重复数据,还能保证每个id只返回一条结果,比第一种方法更灵活,后续如果表中新增其他字段,也能轻松扩展筛选逻辑。
内容的提问来源于stack exchange,提问作者riloth
相关产品推荐
相关产品推荐

