在sql语句之后删除给定表tab
中的重复记录。这按预期工作。有人可以向我介绍over, partition
语句以及它在sql server或任何服务器上的工作原理。
with cte as (
select c1, c2, c3,c4,c5,row_number() over (partition by c1, c2, c3,c4 order by id) as [rn]
from [xxx].[dbo].[tab]
)
delete cte where [rn] > 1;
答案 0 :(得分:0)
Over(partition by ...)基本上是一个group by,仅应用于那一列。所以,你正在做的是:
选择几行,然后选择一个row_number: 对c1,c2,c3和c4的每个组合重新开始,并显示基于id列(该特定组合中的所有项目)排序的行号。