2014-02-17 315 views
-3

問題:我不知道如何去刪除所有「重複」記錄,以便只留下不同的記錄。刪除「重複」記錄

從這個

所以:

╔══════╦════════════╦════════╦════╗ 
║ date ║ dupe_count ║ field1 ║ id ║ 
╠══════╬════════════╬════════╬════╣ 
║ x ║   48 ║ y  ║ a ║ 
║ x ║   48 ║ y  ║ b ║ 
║ x ║   48 ║ y  ║ c ║ 
║ x ║   48 ║ y  ║ d ║ 
║ x ║   48 ║ y  ║ e ║ 
║ x ║   48 ║ y  ║ f ║ 
║ x ║   48 ║ y  ║ g ║ 
║ x ║   48 ║ y  ║ h ║ 
║ x ║   48 ║ y  ║ i ║ 
╚══════╩════════════╩════════╩════╝ 

要這樣:

╔══════╦════════════╦════════╦════╗ 
║ date ║ dupe_count ║ field1 ║ id ║ 
╠══════╬════════════╬════════╬════╣ 
║ x ║   1 ║ y  ║ a ║ 
╚══════╩════════════╩════════╩════╝ 

任何想法?

+0

@Drew查詢不是數據的tough.but解釋以獲得最佳的查詢。什麼是dupe_count是重要的,爲什麼它是48.why是ID非數字爲什麼dupe_count意志?變成1.他的意思是什麼? – KumarHarsh

回答

2

SQL Server具有可更新CTE的很好功能。所以,你可以這樣做:

with todelete as (
     select t.*, row_number() over (partition by dupe_count, field1 order by id) as seqnum 
     from table t 
    ) 
delete from todelete 
    where seqnum > 1;