2014-02-17 223 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;