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,是的,删除重复的行但基于多列,如果我没有表达正确,对不起: