删除重复项,保留其中一个,分组依据

vvi*_*vic 5 sql sql-server

我需要删除每个表 ID 的所有重复项(除了一个)。就像下面这样。我需要删除 valueid 上 01,02,03 的所有重复项...

\n\n

原来的:

\n\n
id      | valueid   |   data\n____________________________\n01      | 1001      |   datadata1       \n01      | 1002      |   datadata2\n01      | 1001      |   datadata1\n02      | 1323      |   datamoredata123\n02      | 1323      |   datamoredata123\n03      | 22123     |   evenmoredata\n03      | 24444     |   andalsomore\n
Run Code Online (Sandbox Code Playgroud)\n\n

应该像这样结束:

\n\n
id      | valueid   |   data\n____________________________\n01      | 1001      |   datadata1       \n01      | 1002      |   datadata2\n02      | 1323      |   datamoredata123\n03      | 22123     |   evenmoredata\n03      | 24444     |   andalsomore\n
Run Code Online (Sandbox Code Playgroud)\n\n

试图用这样的方法来做到这一点,但我不\xc2\xb4t 不明白如何将删除的 id 分组

\n\n
WITH CTE AS(\n   SELECT valueid,\n       RN = ROW_NUMBER()OVER(PARTITION BY valueid ORDER BY valueid)\n   FROM tblvalues\n)\nDELETE FROM CTE WHERE RN > 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

有什么建议么?

\n\n

提前致谢

\n

Gio*_*sos 5

您需要将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
Run Code Online (Sandbox Code Playgroud)

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