我知道对此有很多问题,也有很多解决方案,其中大多数都针对每个人的具体情况。但是,就我而言,我似乎无法只获取要删除的记录集,只留下第一个 ID 或最低值 ID。
这是我的表格示例:
ID COL_A COL_B what I need to do
24556552 KD PT PERSONAL TRAINING, AND 58 MOU 5691212
24556924 KD PT PERSONAL TRAINING, AND 58 MOU 5691212 <-- remove
24556869 KHETSHI DHARAMSHI & CO LTD, 5690443
24556951 KHETSHI DHARAMSHI & CO LTD, 5690443 <-- remove
24528435 KINNY TINT LDA 5689791
24528436 KINNY TINT LDA 5689791 <-- remove
24528437 KINNY TINT LDA 5689791 <-- remove
24528438 KINNY TINT LDA 5689791 <-- remove
24528439 KINNY TINT LDA 5689791 <-- remove
有没有办法将该表链接回其自身,这样我只能获取它的第一次出现,保留它并删除其余的?我不熟悉 PARTITION OVER 等。
谢谢
如果您只想查看没有重复项的数据,请使用
ROW_NUMBER()
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY COL_A, COL_B ORDER BY ID) rn
FROM yourTable
)
SELECT ID, COL_A, COL_B
FROM cte
WHERE rn = 1;
如果你确实需要删除重复记录,那么使用exists逻辑:
DELETE
FROM yourTable t1
WHERE EXISTS (
SELECT 1
FROM yourTable t2
WHERE t2.COL_A = t1.COL_A AND
t2.COL_B = t1.COL_B AND
t2.ID < t1.ID
);