删除具有重复Col1的行,同时考虑删除Col2中具有最高值的行

时间:2016-06-15 12:10:19

标签: sql sql-server

我有一张应该有唯一键的表。我根据另一个键(Col1)的唯一性生成一个键(Col2)。现在,发生了一些事情,我在Col2中有唯一的键,但在Col1中重复了一些数据。对于instanse,我们有

enter image description here

我希望自动删除值为DB02的行,并保留DB01。因为02大于01,我想保持最低值(尽管它包含字符)。

你能帮我查询一下吗?

这是我尝试的查询的图片,以及我没有得到的结果。 :(

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用CTE执行DELETE

;WITH ToDelete AS (
   SELECT ROW_NUMBER() OVER (PARTITION BY Col2 ORDER BY Col1) AS rn
   FROM mytable
)
DELETE FROM ToDelete
WHERE rn > 1

ROW_NUMBER窗口函数用于枚举每个Col2分区中的记录。具有最低Col1值的记录被赋值为rn = 1。所有其他记录都有rn > 1并已删除。

答案 1 :(得分:0)

答案类似于Giorgos Betsos的建议,但代码应该是这样的:

WITH ToDelete AS (
   SELECT Col2 ,ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col1) AS rn
   FROM mytable
)
DELETE FROM ToDelete
WHERE rn > 1