Tsql T-SQL删除多个重复的列,保留最新的列

Tsql T-SQL删除多个重复的列,保留最新的列,tsql,duplicates,Tsql,Duplicates,我有一个问题,类似的选项都不起作用,或者无法解决: 我有一个巨大的数据表,其中包含多个重复项,这些重复项基于多列不同的重复数 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.co

我有一个问题,类似的选项都不起作用,或者无法解决:

我有一个巨大的数据表,其中包含多个重复项,这些重复项基于多列不同的重复数

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
我怎样才能只删除副本而保留最新版本?我可以使用maxid作为最新版本

p.S.COL可能包含null以及-2个被视为相等的null值

您可以使用ROW_NUMBER在其唯一的t.col1、t.col2、t.col3组中从1到n对每个记录进行排序,其中1是最新的,然后只需删除行号大于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;
您可以使用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;

是的,正如预期的那样,我也做了旧版本的内部连接样式,但我喜欢这种方法!谢谢你!!:是的,正如预期的那样,我也做了旧版本的内部连接样式,但我喜欢这种方法!谢谢你!!:我想你指的是行而不是列L,是的,删除重复的行但基于多列,如果我没有表达正确,对不起:我想你指的是行而不是列L,是的,删除重复的行但基于多列,如果我没有表达正确,对不起: