根据列的组合删除重复项

时间:2020-09-20 04:55:44

标签: sql duplicates

id  date    latest  seq
1   2020    Y       2
1   2019    N       1
2   2020    Y       3
3   2020    Y       4
4   2020    Y       5
4   2020    N       5
5   2020    Y       6
5   2020    N       6

此处的ID 1,2,3具有diff seq num并被视为不同的记录。但是ID 4和ID 5具有相同的序列号,并且按照我的要求被视为重复项。因此,我必须删除那些带有“最新”“ N”的内容,并且我的输出表应如下图所示。

id  date    latest  seq
1   2020    Y       2
1   2019    N       1
2   2020    Y       3
3   2020    Y       4
4   2020    Y       5
5   2020    Y       6

如何使其在SQL语句中发生。请帮忙。

3 个答案:

答案 0 :(得分:1)

如果您实际上要删除这些“重复的”记录,请尝试:

DELETE
FROM yourTable t1
WHERE
    latest = 'N' AND
    EXISTS (SELECT 1 FROM yourTable t2
            WHERE t2.id = t1.id AND t2.seq = t1.seq AND
                  t2.latest = 'Y');

如果您只是想查看/选择期望的输出,请使用:

SELECT *
FROM yourTable t1
WHERE
    latest = 'Y' OR
    NOT EXISTS (SELECT 1 FROM yourTable t2
                WHERE t2.id = t1.id AND t2.seq = t1.seq AND
                      t2.latest = 'Y');

screen capture from demo link below

这是第二个选择查询的演示:

Demo

答案 1 :(得分:0)

从很多方面来说,我都会选择"scripts": { "test": "export NODE_ENV=test || SET NODE_ENV=test && nodemon --exec npm start", "golive": "export NODE_ENV=go || SET NODE_ENV=go && nodemon --exec npm start" }, 来实现它,

not exists

答案 2 :(得分:0)

我认为您可以使用聚合:

select id, date, max(latest) as latest, seq
from t
group by id, date, seq;
相关问题