寻找连续区间中缺少项
【问题】
如何查询序列中一列中缺少的数字
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 字段
A2:根据 A 的最小和最大值生成连续的数字序列,再用 merge 函数跟 A 列做差集