1

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

4

1 回答 1

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

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

于 2013-01-04T09:17:21.810 回答