gpt4 book ai didi

mysql - 如何查找多列匹配的重复项

转载 作者:行者123 更新时间:2023-11-29 03:19:06 25 4
gpt4 key购买 nike

我想在 X、Y 和 Z 匹配的表中找到重复项,以最终清除由时间戳标识的旧表。

+------------+-----+----+-----+
| Created | X | Y | Z |
+------------+-----+----+-----+
| 1515622543 | 334 | 72 | 269 |
| 1515622544 | 334 | 72 | 270 |
| 1515622601 | 334 | 72 | 268 |
| 1515622953 | 334 | 72 | 268 |
+------------+-----+----+-----+

在此示例中,X=334, Y=72, Z=268 处有一个重复项。我想列出它们 - 所以它最终看起来像:

+------------+-----+----+-----+
| 1515622601 | 334 | 72 | 268 |
| 1515622953 | 334 | 72 | 268 |
+------------+-----+----+-----+

已经尝试过:

从 decayworld 中选择 count(distinct X)、count(distinct Y)、count(distinct Z);
- 这只是计数,不显示所有 3 (X,Y,Z) 匹配的位置。

SELECT X, Y, Z, COUNT(*) FROM decayworld GROUP BY X, Y, Z HAVING COUNT(*) > 1;
+-----+-----+-----+---------+
| × |是 | Z |计数(*) |
+-----+-----+-----+---------+
| 334 | 72 | 268| 2 |
+-----+-----+-----+---------+
- 它计算结果,但不列出它们。

最佳答案

鉴于 OP 想要删除 所有 旧记录(在提出原始问题后在评论中规定),此查询给出了该结果。此解决方案假设列 id 是唯一的并且从最旧到最新升序排列:

DELETE FROM mytable WHERE NOT EXISTS (
SELECT * FROM (
SELECT MAX(id) AS id FROM mytable GROUP BY x, y, z
) AS keepers
WHERE keepers.id = mytable.id
);

Rextester link

关于mysql - 如何查找多列匹配的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197274/

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