===========================================================
巧解 寻找连续号码的不连续值(断号) 问题
===========================================================
作者: rollingpig(http://rollingpig.itpub.net)
发表于:2005.10.13 00:00
分类: My Oracle Article
出处:http://rollingpig.itpub.net/post/81/42842
---------------------------------------------------------------
发表于:2005.10.13 00:00
分类: My Oracle Article
出处:http://rollingpig.itpub.net/post/81/42842
---------------------------------------------------------------
Question:
table T,列:serial_no
我想能够查询一下serial_no这个字段的不连续的值。
例如:
serial_no
1
2
3
4
6
8
9
10
我想一个sql语句查出来缺失的号码,
显示结果为:
5
7
解决方法:
代码:
SELECT /*+ordered */T2.serial_no + 1, MIN (t3.serial_no) - 1
FROM T T1, T T2, T t3
WHERE T1.serial_no(+) = (T2.serial_no + 1) AND T1.serial_no IS NULLAND t3.serial_no > T2.serial_no
GROUP BY T2.serial_no
解决思路:
1。用not exists /not in ,条件 : t1.serial_no = t2.serial_no + 1
2。参考http://www.itpub.net/406784.html , 将not exists /not in 改为outer join + is null 格式
3。加上 min 条件,确定上下限
有空再列出详细步骤






