我必须清理一个从来没有主键或外键的旧表,其中包含数百行重复数据。我已经看到很多关于如何在仅使用一列时从表中删除的示例,但我不了解如何扩展示例以包含两个可能的三个必要列。
表数据基本上如下所示:
Id Person Date
1 12 3/12/2014
1 12 3/12/2014
我认为以下似乎是实现我的目标的好方法,但它没有返回任何结果。我怎样才能最有效地实现这一目标?如果我能提供帮助,我不想重新创建表格。
WITH cte AS (
SELECT Id, Person, Date,
row_number() OVER(PARTITION BY Id,Person,Date ORDER BY Id) AS rn
FROM dbo.mytable
)
DELETE cte WHERE rn > 1
答案 0 :(得分:0)
您应该按相同的列列表排序和分区。这样,对于所有唯一组合,行号将重新启动。
WITH cte AS (
SELECT Id, Person, Date,
row_number() OVER(PARTITION BY Id,Person,Date ORDER BY Id,Person,Date) AS rn
FROM dbo.mytable
)
DELETE cte WHERE rn > 1