gpt4 book ai didi

mysql - 如何在mysql中找到这种情况下的重复项和空白

转载 作者:可可西里 更新时间:2023-11-01 06:38:36 25 4
gpt4 key购买 nike

嗨,我有一张看起来像的 table

-----------------------------------------------------------
| id | group_id | source_id | target_id | sortsequence |
-----------------------------------------------------------
| 2 | 1 | 2 | 4 | 1 |
-----------------------------------------------------------
| 4 | 1 | 20 | 2 | 1 |
-----------------------------------------------------------
| 5 | 1 | 2 | 14 | 1 |
-----------------------------------------------------------
| 7 | 1 | 2 | 7 | 3 |
-----------------------------------------------------------
| 20 | 2 | 20 | 4 | 3 |
-----------------------------------------------------------
| 21 | 2 | 20 | 4 | 1 |
-----------------------------------------------------------

场景

有两种情况需要处理。

  1. Sortsequence 列值对于一个 source_idgroup_id 应该是唯一的。例如,如果所有具有 group_id = 1 AND source_id = 2 的记录都应该具有唯一的 sortsequence。在上面的示例中,具有 id= 和 5 且具有 group_id = 1 和 source_id = 2 的记录具有相同的排序序列,即 1。这是错误的记录。我需要找出这些记录。
  2. 如果 group_id 和 source_id 相同。 sortsequence 列值应该是连续的。应该没有间隙。例如在上表中 id = 20、21 具有相同 group_id 和 source_id 且 sortsequence 值为 3 和 1 的记录。即使这是唯一的,但 sortsequence 值存在差距。我还需要找出这些记录。

我迄今为止的努力

我写了一个查询

SELECT source_id,`group_id`,GROUP_CONCAT(id) AS children 
FROM
table
GROUP BY source_id,
sortsequence,
`group_id`
HAVING COUNT(*) > 1

本次查询只针对场景一,场景二如何处理?有没有什么办法可以在同一个查询中做到这一点,或者我必须写其他的来处理第二种情况。

顺便说一下,查询将处理表中的数百万条记录,因此性能必须非常好。

最佳答案

Tere J 评论中得到答案。以下查询涵盖了上述两个条件。

 SELECT 
source_id, `group_id`, GROUP_CONCAT(id) AS faultyIDS
FROM
table
GROUP BY
source_id,group_id
HAVING
COUNT(DISTINCT sortsequence) <> COUNT(sortsequence) OR COUNT(sortsequence) <> MAX(sortsequence) OR MIN(sortsequence) <> 1

也许它可以帮助其他人。

关于mysql - 如何在mysql中找到这种情况下的重复项和空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631269/

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