gpt4 book ai didi

mysql - SQL查询删除

转载 作者:行者123 更新时间:2023-12-02 09:05:25 24 4
gpt4 key购买 nike

考虑下表

id  || C1  || C2  || C3 || Timestamp
--------------------------------
1 || a || b || 1 || t1
2 || a || b || 1 || t2
3 || a || b || 2 || t3
4 || a || b || 2 || t4
5 || a || b || 2 || t5
6 || b || d || 3 || t6
7 || b || d || 3 || t7

C3 包含给定的 C1 和 C2 组合的不同值。 C1、C2 和 C3 的给定组合可以包含具有不同时间戳的多行(如行 4,5)。

但是,重复会导致为给定的 C1 和 C2 对创建多个 C3。因此,这里第 3、4 和 5 行违反了规则,因为引入了新的 C3(2)。给定 C1 和 C2,C3 始终是唯一的。

我想保留 C1、C2、C3 的最新(带时间戳)组合并删除所有旧的组合。因此仅应存在第 3,4,5 行,并应删除第 1,2 行。
我所说的“最新”是指应删除给定 C1、C2 的旧 C3 值,因此在本例中,第 1,2 行被删除,但第 3、4、5 行保留。

enter image description here

例如,给定唯一的 nid 和原始列,所有带有mock_id YR 的行都应该被删除。

我尝试了各种查询和联接,但无法找出可以解决这个问题的方法。

最佳答案

我们可以尝试在这里使用存在逻辑:

DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.C1 = t1.C1 AND t2.C2 = t1.C2 AND t2.C3 > t1.C3);

用简单的英语来说,此查询表示删除任何我们可以找到具有相同 C1 的记录。和C2值,但更大 C3值(value)。如果存在这样的另一条记录,则意味着当前正在检查的记录不是最新的,应删除。

关于mysql - SQL查询删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59152257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com