Sqlserver 使用row_number()over(partitioon by) 分组去重
在查询数据时如果有重复我们知道可以用 distinct 去除重复值但使用 distinct 只能去除所有查询列都相同的记录如果有一个字段不同distinct 就无法去重。select ID , 编码, 姓名 from person where 姓名李四但我们还想要实现这样的效果这时我们可以用 row_number()over(partitioon by column1 order by column2) 先进行分组。根据 COLUMN1 分组在分组内部根据 COLUMN2 排序结果表示为每组内部排序后的顺序编号这个编号在组内是连续且的。select ID , 编码, 姓名 ,ROW_NUMBER()over(partition by 姓名 order by ID desc) as new_id --对姓名进行分组对id进行从大到小排序 from person where name李四再根据新生成的值作为条件取出每组中的某个值。通常情况下取大值或小值其它情况看需求。一般将上述语句看做为一个新表如临时表或外嵌查询 select。以临时表为例。select ID , 编码, 姓名 ,ROW_NUMBER()over(partition by 姓名 order by ID desc) as new_id --对姓名进行分组对id进行从大到小排序 into #aa from person where name李四select * from #aa where new_id1就是为了去除重复值。将重复值分组按大值排序取条。