我遇到了问题,并没有类似的选项有效,或者无法解决这个问题:)
我有一个庞大的数据表,其中包含多个基于多列的重复项(不同数量的重复项)。
Table1
id (primary key)
col1
col2
col3
col4
...
我关心的是col1,col2,col3:
这些是重复的:
SELECT
, t.id
, t.col1
, t.col2
, t.col3
, count(*) AS 'Times duplicated'
FROM Table1 t
GROUP BY t.col1, t.col2, t.col3
HAVING count(*) > 1
ORDER BY r.col1
如何只删除重复项但保留最新版本(我可以使用max(id)作为最新版本)?
P.S。 cols也可以包含null - 2个空值被视为等于)
答案 0 :(得分:2)
您可以使用ROW_NUMBER()
在其唯一的t.col1, t.col2, t.col3
组(其中1是最新的)中对1 - n中的每条记录进行排名,然后只删除行号大于1的所有记录:
DELETE t
FROM ( SELECT t.*,
RowNum = ROW_NUMBER() OVER(PARTITION BY t.col1, t.col2, t.col3
ORDER BY t.ID DESC)
FROM Table1 AS t
) AS t
WHERE RowNum > 1;