在SQL Server中删除重复的最大行

问题描述

我想删除sql中的重复行。我的查询可以删除RN > 1的重复行,但是我想删除max(RN)

WITH CTE AS(
   SELECT [col1],[col2],[col3]
       RN = ROW_NUMBER()OVER(PARTITION BY [col1],[col2] ORDER BY [col1],[col2])
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1

Example data

解决方法

只需将分区更改为当前顺序的倒序,然后仅删除具有第一行编号的记录:

WITH CTE AS (
    SELECT [col1],[col2],[col3]
           RN = ROW_NUMBER() OVER (PARTITION BY [col1],[col2] ORDER BY [col1] DESC,[col2] DESC)
    FROM dbo.Table1
)

DELETE FROM CTE WHERE RN = 1;