2014-02-17 4 views
-3

문제점 : 별개의 레코드 만 남도록 모든 "중복"레코드를 삭제하는 방법을 모르겠습니다. 이에서 그래서"중복"레코드 삭제

:

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

어떤 아이디어 : 여기에

╔══════╦════════════╦════════╦════╗ 
║ 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 ║ 
╚══════╩════════════╩════════╩════╝ 

?

+0

@ 드류 쿼리의 데이터 힘들었죠 설명하지 것은 최고의 쿼리 뭐야이 dupe_count 인 것이 중요하고 왜 48.why 것은 왜 dupe_count 의지 ID 숫자가 아닌? 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;