首页 > 解决方案 > 删除重复项,保留其中一个,分组

问题描述

对于每个表 ID,我需要删除所有重复项,但只有一个。像下面这样。我需要删除 valueid 上 01,02,03 的所有重复项...

原来的:

id      | valueid   |   data
____________________________
01      | 1001      |   datadata1       
01      | 1002      |   datadata2
01      | 1001      |   datadata1
02      | 1323      |   datamoredata123
02      | 1323      |   datamoredata123
03      | 22123     |   evenmoredata
03      | 24444     |   andalsomore

应该像这样结束:

id      | valueid   |   data
____________________________
01      | 1001      |   datadata1       
01      | 1002      |   datadata2
02      | 1323      |   datamoredata123
03      | 22123     |   evenmoredata
03      | 24444     |   andalsomore

试图用这样的东西来做,但我不明白如何在 id 上对删除进行分组

WITH CTE AS(
   SELECT valueid,
       RN = ROW_NUMBER()OVER(PARTITION BY valueid ORDER BY valueid)
   FROM tblvalues
)
DELETE FROM CTE WHERE RN > 1

有什么建议么?

提前致谢

标签: sqlsql-server

解决方案


您需要将id列添加到PARTITION

WITH CTE AS(
   SELECT valueid,
       RN = ROW_NUMBER()OVER( PARTITION BY id, valueid ORDER BY data)
   FROM tblvalues
)
DELETE FROM CTE WHERE RN > 1

这样,您可以valueid分别删除每个id. 列data确定删除哪些重复项。


推荐阅读