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