2013-04-01 46 views
4

我無法找到適當的方式來刪除具有最小編號的sql表中的重複鍵。如果有相同數字的重複行,我需要刪除其中的一個。SQL刪除具有最低編號的重複行

例如

Key  Number Description 

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

在這裏,我需要刪除具有較小的數量3,則在第二行與4號這是較小然後號5,第三或第四行中的一個,和第五行最後一排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。