2013-04-01 5 views
4

가장 낮은 숫자의 SQL 테이블에서 중복 키를 삭제하는 적절한 방법을 찾을 수 없습니다. 같은 번호의 행이 중복되는 경우 그 중 하나를 삭제해야합니다. I는 다음 작은 숫자 3이 숫자 5에서, 제 3 또는 제 4 행의 한 후 작은 번호 4 번째 행, 그리고 다섯 번째 행을 삭제해야 여기SQL 숫자가 가장 낮은 중복 행을 삭제하십시오.

Key  Number Description 

11111 5 Desc1 
11111 4 Desc2 
22222 2 Desc1 
22222 2 Desc2 
33333 3 Desc1 
33333 5 Desc2 

마지막 행 5.

+0

이 RDBMS는 어느 것입니까? - MySQL, SQLServer, Oracle ...? –

+0

기본 키 (예 : -P)와 같은 다른 열이 있습니까? 그게 당신의 rdbms을 알지 않고 쉽게 것들을 만들 것입니다 – Najzero

+0

이것은 SQLServer입니다. 불행히도 테이블에 기본 키가 없습니다. –

답변

5

쿼리는 SQL-서버에서 중복을 제거 :

;with c as 
(
    select *, row_number() over(partition by [Key] order by Number desc) as n 
    from YouTable 
) 
delete from c 
where n > 1 
2
DELETE FROM ztable dd 
WHERE EXISTS (
    SELECT * FROM ztable ex 
    WHERE ex.zkey = dd.zkey 
    AND (ex.znumber > dd.znumber 
     OR (ex.znumber = dd.znumber AND ex.description > dd.description) 
     ) 
); 

참고 : 예약어/키워드와의 혼동을 피하기 위해 키와 번호의 이름을 zkey 및 znumber로 변경했습니다. ztable과 유사합니다.

관련 문제