2015-12-10 156 views
0

我有兩個表,我需要每週更新一次。我將在文件中重複一個唯一標識符,我需要根據另一個字段的最大值刪除重複項,但是,可能存在最大字段的重複項。刪除組中的重複記錄 - SQL

TrackID | GrossOpens (Amoung other fields...) 
1  |  2 
1  |  1 
2  |  5 
2  |  10 
2  |  10 
3  |  3 

我一直能得到我的數據,得到如下結果:

TrackID | GrossOpens 
1 |  2 
2 |  10 
2 |  10 
3 |  3 

我需要有匹配的「GrossOpens」各組要刪除的重複。我用下面的代碼來獲取adove結果:

DELETE * 
FROM NL_2015 AS NL 
WHERE EXISTS (SELECT * FROM NL_2015 DL WHERE DL.TrackID = NL.TrackID AND (DL.GrossOpens > NL.GrossOpens OR (DL.GrossOpens = NL.GrossOpens AND DL.TrackID > NL.TrackID))); 
+0

我想爲「GrossOpens」添加一個排名或Row_Number可能工作,但並不確定ho正確完成這個任務。 – KWusf

回答

2

使用此查詢創建行號和所有副本將擁有優越的行號爲1

WITH dupes 
AS (
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY TrackID ORDER BY grossopens DESC) row 
    FROM NL_2015) 
DELETE FROM dupes 
WHERE row > 1 

編輯的查詢沒有WITH

DELETE FROM (
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY TrackID ORDER BY grossopens DESC) row 
    FROM NL_2015 
) 
WHERE 
row > 1 
+0

其實你會想'按grossopens desc命令,然後這會工作。 – sgeddes

+0

你是對的,編輯我的回答 –

+0

謝謝,@JustinLessard!我唯一的問題是我使用Access來完成這個不支持WITH語句。還有什麼我可以重寫爲SELECT,UPDATE或DELETE? – KWusf