mysql检查数字序列中的间隙

时间:2013-01-03 17:07:39

标签: mysql numbers sequence

我发现this主题对解决我的问题很有帮助。但我想找到另一个问题的解决方案。如果数字序列看起来像这个01258,那么缺少的间隙是3 4 7.完美的结果,但是如果序列是258,结果是相同的,函数忽略0和1.你能不能帮我修改那个函数以便检查间隙从0开始?我甚至不知道从什么开始。谢谢。

1 个答案:

答案 0 :(得分:1)

输出缺失范围列表,如提供的链接,但在指定范围内(未经过广泛测试)。

你需要通过它们来迭代来获得实际值。

CREATE TABLE tempTable AS ...

DECLARE @StartID INT ...
DECLARE @EndID INT ...

SELECT @StartID as gap_starts_at, 
       COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3
                 WHERE t3.id > @StartID AND t3.id < @EndID), @EndID) as gap_ends_at
FROM tempTable t1
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = @StartID)
UNION
SELECT (t1.id + 1) as gap_starts_at, 
       COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3 WHERE t3.id > t1.id),
                @EndID) as gap_ends_at
FROM #tempTable t1
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = t1.id + 1)
      AND id < @EndID

编辑: Here's一个链接,其中包含几种查找缺失值的方法(我认为它们中的任何一种都不适用于范围,但有些方法可能比其他方法更容易扩展