需要使用 row_number() 从 table 中删除重复记录

Need to delete duplicate records from the table using row_number()

我正在进行 table 测试,其数据如下,我想删除 trsid 124,我的数据库中有数百万个条目,这只是一个场景。概念是从 table

中删除重复条目
--------------------------------------------
TrsId   |   ID  |   Name    |
--------------------------------------------    
123     |   1   |   ABC     |   
124     |   1   |   ABC     |

我正在尝试

delete from test
select T.* from
(
    select ROW_NUMBER() over (partition by ID order by name) as r,
           Trsid,
           ID,
           name
    from test
) t
where r = 2

即使我更新对我来说没问题的查询

update test set id=NULL
select T.* from
(
    select ROW_NUMBER() over (partition by ID order by name) as r,
           Trsid,
           ID,
           name
    from test
) t
where r = 2

但是如果我 运行 这两个查询都会删除 table 测试中的所有记录。如果我更新它更新两个记录。 我不知道我在这里做错了什么

WITH cte AS
(
    SELECT ROW_NUMBER() OVER(PARTITION by ID ORDER BY name) AS Row
    FROM test
)

DELETE FROM cte
WHERE Row > 1

使用下面的查询。

      ;WITH cte_1
         AS (SELECT ROW_NUMBER() OVER(PARTITION BY ID,NAME ORDER BY TrsId ) Rno,*
               FROM YourTable)
         DELETE
         FROM cte_1
         WHERE RNO>1

要查找重复记录,我们可以编写如下查询,

;WITH dup_val 
     AS (SELECT a, 
                b, 
                Row_number() 
                  OVER( 
                    partition BY a, b 
                    ORDER BY b, NAME)AS [RANK] 
         FROM   table_name) 
SELECT * 
FROM   dup_val 
WHERE  [rank] <> 1; 
WITH cte_DUP AS (
SELECT * FROM (
select <col1,col2,col3..coln>, row_number() 
over(partition by <col1,col2,col3..coln>
order by <col1,col2,col3..coln>  ) rownumber  
from <your table> ) AB  WHERE  rownumber > 1)

DELETE FROM cte_DUP WHERE ROWNUMBER > 1