SQL Server如何按指定列去重并保留每个fid的最新日期单条记录
SQL Server 按fid分组取最新日期单条记录的实现方案
实现逻辑
使用SQL Server原生支持的窗口函数ROW_NUMBER()可以简单高效实现需求,不需要额外关联聚合结果,也不会出现最新日期对应多条记录导致重复的问题。
示例代码
SELECT fid, name, date FROM ( SELECT fid, name, date, -- 按fid分组,组内按日期倒序排序生成序号 ROW_NUMBER() OVER(PARTITION BY fid ORDER BY date DESC) AS rn FROM 你的表名 -- 替换为实际业务表名 ) t WHERE rn = 1
代码说明
PARTITION BY fid:将全表数据按fid字段拆分为独立分组,每个fid对应一个分组ORDER BY date DESC:每个分组内部按date字段从新到旧排序,最新的日期排在分组最前面- 同一fid下如果有多个相同最新日期的记录,
ROW_NUMBER()会自动给这些记录分配连续序号,取rn=1就可以实现「任意保留1条」的要求
备选方案(不使用窗口函数)
如果特殊场景不能使用窗口函数,也可以用关联子查询实现:
SELECT t1.* FROM 你的表名 t1 WHERE t1.name = ( SELECT TOP 1 name FROM 你的表名 t2 WHERE t2.fid = t1.fid ORDER BY t2.date DESC )
内容的提问来源于stack exchange,提问作者omega
相关产品推荐
相关产品推荐

