Oracle层次查询和分析函数在号段选取中的应用
2007-05-08 12:09:10 来源:WEB开发网核心提示:本文给出了Oracle层次查询和分析函数在号段选取中的应用中四个问题的解决方案,供大家参考!1. 问题的提出在实际工作中,Oracle层次查询和分析函数在号段选取中的应用,我们常常会碰到号段选取的问题,(1)一组连续的数,例如2005年8月1日,之前的在校学生入学年份为2001~2004,去掉中间一些数,要求出剩下的数
本文给出了Oracle层次查询和分析函数在号段选取中的应用中四个问题的解决方案,供大家参考!
1. 问题的提出
在实际工作中,我们常常会碰到号段选取的问题。
(1)一组连续的数,去掉中间一些数,要求出剩下的数的区间(即号段)。
例如:一串数字为1,2,3,4,7,9,10,则号段为1-4,7-7,9-10
(2)知道号段的起止,要求出该号段内所有的数。
例如:号段为1-3,15-15,则号段内所有的数为1,2,3,15
(3)一组数,中间可能有断点,要求出缺失的数。
例如:一串数字为1,2,3,4,7,9,10,则缺失的数为5,6,8
(4)已知大号段范围及已用号段范围,求可用号段范围。
例如:大号段范围0-999,已用号段范围0-200,399-599,则可用号段范围为201-398,600-999
2. 基础知识
先做下热身运动,回顾一下层次查询和lead/lag函数的运用。
2.1 伪列rownum和level
伪列就是并非在表中真正存在的列。已有很多资料介绍rownum和level这两个伪列。这里只想强调一点,伪列是只针对结果集的。
2.2 利用层次查询构造连续的数
产生5~8这4个连续的数:
select * from (select rownum+4 from dual connect by rownum<5);
select * from (select level+4 from dual connect by level<5);
以8月为界,例如2005年8月1日,之前的在校学生入学年份为2001~2004,之后的为2002~2005。求当前日期下的在校学生入学年份:
select * from (select to_char(add_months(sysdate, 4), 'yyyy')
- rownum from dual connect by rownum<5);
2.3 用分析函数Lead和Lag获得相邻行的字段值
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接