序列中缺少数字的SQL摘要

序列中缺少数字的SQL摘要,sql,sql-server,gaps-and-islands,number-sequence,Sql,Sql Server,Gaps And Islands,Number Sequence,我想按顺序找出差距,并以以下方式总结调查结果: 编号顺序:2,3,4,8,9,12,13,14,15 缺失数字:0、1、5、6、7、10、11 最小编号:始终为0 max number:本例中序列15的最大数目 摘要应该如下所示: From | To | # of missing 00 | 01 | 2 05 | 07 | 3 10 | 11 | 2 我使用的是SQL server,实际上,序列将包含更多接近一百万的数字。我已经找到了许多脚本,它们可以在序列中查找并列出

我想按顺序找出差距,并以以下方式总结调查结果:

编号顺序:2,3,4,8,9,12,13,14,15 缺失数字:0、1、5、6、7、10、11 最小编号:始终为0 max number:本例中序列15的最大数目

摘要应该如下所示:

From | To | # of missing  
00   | 01 | 2  
05   | 07 | 3  
10   | 11 | 2
我使用的是SQL server,实际上,序列将包含更多接近一百万的数字。我已经找到了许多脚本,它们可以在序列中查找并列出缺失的数字,但我不知道如何以所需的方式进行总结

如果有帮助,该字段称为BELNR,该表称为BSEG

编辑: 在Gaps and Islands材料的帮助下,我找到了一个可能不是最理想的解决方案,但我认为它是有效的:

with C as
(
select belnr, row_number() over(order by belnr) as rownum
from bseg
)
select cast(Cur.belnr as bigint) + 1 as [From], cast(nxt.belnr as bigint) - 1 as [To], (cast(nxt.belnr as bigint) - 1) - (cast(Cur.belnr as bigint) + 1) + 1  as [# of Missing]
from C as Cur
join C as Nxt
    on Nxt.rownum = cast(Cur.rownum as int) +1
Where cast(nxt.belnr as bigint) - cast(Cur.belnr as bigint) > 1 

这就是所谓的孤岛和缺口问题。请在此处阅读更多信息:

标题中的“间隙”一词指的是值序列中的间隙。 岛是由间隙分隔的连续序列。“差距与挑战” 孤岛的问题在于使用SQL快速检测未中断的数据 序列,以及列中它们之间的间距范围


您的输出看起来不正确。从和到从缺少的数字中获得值您说我找到了许多脚本,这些脚本在序列中查找并列出缺少的数字…请包括这些信息以及它使用上述数据集生成的内容,这将表明您有一个部分解决方案,并且您希望将输出格式化为摘要。否则,当您已经有了第一部分时,您将依赖用户为您创建两个解决方案。@ughai:我想显示缺少值的差距Tanner:我已经将我使用的代码发布到了我的要点之上。您缺少值5、6和7,但您有一行05 | 07 | 3。你是如何决定从输出中得到5和7并排除6的?它的意思是一个范围-从5到7,包括数字5、6、7,因此缺失的数字是3。在现实世界的例子中,我丢失了10k或更多缺失数字的范围,所以将它们全部列出是没有意义的。对不起,我弄错了钱箱,这就是我要找的