2016-07-22 62 views
1

我有一個問題,並沒有一個類似的選項工作,或無法弄清楚:)T-SQL刪除多列重複,保持最新的一個

我有數據的一個巨大的表,其中包含幾個重複的基於多列(不同數量的重複)。

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可能包含空以及 - 被認爲是2個空值等於)

+0

我想你的意思行不列 – Paparazzi

+0

哈哈,是的,刪除重複的行,但基於多列,對不起,如果我沒有表達吧:) – AdrianD

回答

2

您可以使用ROW_NUMBER()從1個等級的每一個記錄 - N的內t.col1, t.col2, t.col3其獨特的組(其中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; 
+0

是的,這按預期工作,我做到了也是老版本的內部連接風格,但我喜歡這種方法!謝謝你!! :) – AdrianD

相關問題