如何保留重复记录的第一条记录

问题描述 投票:0回答:1

我知道对此有很多问题,也有很多解决方案,其中大多数都针对每个人的具体情况。但是,就我而言,我似乎无法只获取要删除的记录集,只留下第一个 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 等。

谢谢

sql sql-server duplicates
1个回答
0
投票

如果您只想查看没有重复项的数据,请使用

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
);
© www.soinside.com 2019 - 2024. All rights reserved.