得到一个包含多个列的表,最后是日期。它看起来像:
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;
它不起作用,因为它计算每一行,包括不同的日期。。没有发现任何其他线索
预期输出为:
Col1 | Col2 | Col3 | 日期|
---|---|---|---|
x | y | z | 2022-10-10 |
a | b | c | 2022-10-10 |
w | u | c | 2022-10-15
您可以使用通用表表达式和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;