寻找连续区间中缺少项

【问题】

如何查询序列中一列中缺少的数字

A    B C  
1001  
1002  
1003  
1007  
1008  
1009  
1010  
1012  

如何在 A 列显示序列中缺失的 1004\1005\1006 及 1011

【回答】

使用 sql 语句实现时可以先根据 A 的最小和最大值生成连续的数字序列,再跟 A 列做差集,需要使用子查询嵌套完成。但在集合较大时差集计算是个很慢的动作,如果要考虑效率,应当先排序再用归并的办法对出缺失的,那就只能用存储过程写了,非常麻烦。

可以考虑用集算器 SPL 实现,算法代码直观易懂:



A

1

=db.query(“select A from table1 order by A”).(A)

2

=[to(A1(1),A1.m(-1)),A1].merge@d()

A1:查询 A 字段

1png

A2:根据 A 的最小和最大值生成连续的数字序列,再用 merge 函数跟 A 列做差集

2png