gpt4 book ai didi

MySQL:确保列中数字的连续性

转载 作者:行者123 更新时间:2023-11-30 21:31:06 25 4
gpt4 key购买 nike

我需要一些关于 MySQL 查询的帮助。

假设我们有一个包含列“id”、“unique_id”和“consecutive_id”的表。 “id”列中的数字并不总是连续的,而我们必须在“consecutive_id”列中保持连续性。基本上每一行都应该有自己的连续编号,但有时可能会出现共享相同连续编号的行。这些行在“unique_id”列中具有相同的值。我需要一个查询来查找一行的第一个 ID,该行的多个行具有相同的连续 ID 和一个不属于另一行的唯一 ID。

https://www.db-fiddle.com/f/hy8SACLyM2D65H2ZY31c2f/0 创建了一个 fiddle 来证明我的问题。如您所见,ID 3 和 5 具有相同的连续数字 (2)。没关系,因为它们共享相同的唯一 ID。 ID 9、10、12 和 14 也具有相同的连续编号 (4),但只有 ID 9 和 10 具有相同的唯一 ID。因此在这种情况下,查询应该找到 ID 12。

你能帮我开发一个解决方案吗?

非常感谢您的提前帮助。

祝一切顺利

玛丽安

最佳答案

您可以使用 COUNT(DISTINCT unique_id)找到 consecutive_id 的值有不同的 unique_id .

SELECT consecutive_id
FROM test
GROUP BY consecutive_id
HAVING COUNT(DISTINCT unique_id) > 1

然后您可以将它与您的原始表连接起来,同时按 unique_id 分组和 consecutive_id , 并获取计数为 1 的行,这意味着他们不等于该组的其他成员。

由于可能存在多个离群值,因此您需要另一个级别的子查询,它只获取每个连续 ID 的最小离群值。

SELECT consecutive_id, MIN(id) as id
FROM (
SELECT a.consecutive_id, MIN(id) AS id
FROM test AS a
JOIN (
SELECT consecutive_id
FROM test
GROUP BY consecutive_id
HAVING COUNT(DISTINCT unique_id) > 1) AS b
ON a.consecutive_id = b.consecutive_id
GROUP BY a.consecutive_id, a.unique_id
HAVING COUNT(*) = 1) AS x
GROUP BY consecutive_id

DEMO

关于MySQL:确保列中数字的连续性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56121090/

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