SQL删除编号最小的重复行

时间:2013-04-01 11:25:40

标签: sql sql-server duplicate-removal

我找不到合适的方法来删除编号最小的sql表中的重复键。如果存在具有相同Number的重复行,我需要删除其中一个。

例如

Key     Number  Description

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

这里我需要删除第4行,第4行小于第5行,第3行或第4行之一,第5行第3行,第3行,第3行,最后第5行。

2 个答案:

答案 0 :(得分:6)

查询删除SQL-Server中的重复:

;with c as
(
    select *, row_number() over(partition by [Key] order by Number desc) as n
    from YouTable
)
delete from c
where n > 1

答案 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。

相关问题