问题描述
我想删除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
解决方法
只需将分区更改为当前顺序的倒序,然后仅删除具有第一行编号的记录:
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;