Sam*_*der 23 sql oracle plsql gaps-and-islands
我正在做一个为大学创建录取系统的项目; 这些技术是Java和Oracle.
在其中一个表中,存储了预先生成的序列号.之后,根据这些序列号,将输入申请人的表格数据.我的要求是,当输入过程完成后,我将不得不生成一个明智的报告.如果在喂食预先生成的序列号期间,任何序列号都会丢失.
例如,在表格中,序列号是7001,7002,7004,7005,7006,7010.从上面的系列可以清楚地看出,从7001到7010,缺失的数字是7003,7007,7008和7009.
Oracle中是否有任何DBMS功能可以找出这些数字,或者如果任何存储过程可能满足我的目的,请建议一个算法.
我可以在Java中找到一些技术,但为了提高速度,我想在Oracle中找到解决方案.
Rob*_*ijk 43
没有硬编码9的解决方案:
select min_a - 1 + level
from ( select min(a) min_a
, max(a) max_a
from test1
)
connect by level <= max_a - min_a + 1
minus
select a
from test1
Run Code Online (Sandbox Code Playgroud)
结果:
MIN_A-1+LEVEL
-------------
7003
7007
7008
7009
4 rows selected.
Run Code Online (Sandbox Code Playgroud)
Pat*_*ick 13
试试这个:
SELECT t1.SequenceNumber + 1 AS "From",
MIN(t2.SequenceNumber) - 1 AS "To"
FROM MyTable t1
JOIN MyTable t2 ON t1.SequenceNumber < t2.SequenceNumber
GROUP BY t1.SequenceNumber
HAVING t1.SequenceNumber + 1 < MIN(t2.SequenceNumber)
Run Code Online (Sandbox Code Playgroud)
以下是序列7001,7002,7004,7005,7006,7010的结果:
From To
7003 7003
7007 7009
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73218 次 |
| 最近记录: |