删除SQL Server Express中部分重复的行



得到一个包含多个列的表,最后是日期。它看起来像:

Col1   Col2   Col3   date
-----+------+------+------------
x     y      z     2022-10-01
x     y      z     2022-10-10
a     b      c     2022-10-01
a     b      b     2022-10-10
w     u      c     2022-10-15

我要做的是删除基于前三列的重复项。最新日期保留在第4列。

尝试将其与一起列出

Select col1, col2, col3, count(*) as counter 
from database
group by col1, col2, col3, date 
having count (*) > 1;

它不起作用,因为它计算每一行,包括不同的日期。。没有发现任何其他线索

预期输出为:

日期2022-10-15
Col1Col2Col3
xyz2022-10-10
abc2022-10-10
wuc

您可以使用通用表表达式和ROW_NUMBER来实现这一点:

WITH cte 
AS
(
SELECT col1, col2, col3, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY date) as rn
from database
)
DELETE cte
WHERE rn>1;

只需按前3列进行聚合,并取第四列的最大值:

SELECT col1, col2, col3, MAX(date) AS date
FROM yourTable
GROUP BY col1, col2, col3;

最新更新