Oracle层次查询和分析函数在号段选取中的应用
2007-05-08 12:09:10 来源:WEB开发网核心提示: select rn, lag(rn)over(order by rn) previos,lead(rn)over(order by rn) next from (select rownum+4 rn from dual connect by rownum<5);RN PREVIOS
select rn, lag(rn)over(order by rn) previos,
lead(rn)over(order by rn) next from (select rownum+4 rn from dual connect by rownum<5);
RN PREVIOS NEXT
---------- ---------- ----------
5 6
6 5 7
7 6 8
8 7
简单的说,在这里,Lag是获得前一行的内容,而Lead是获得后一行的内容。select rn, lag(rn,2,-1)over(order by rn) previos,
lead(rn,2,-1) over(order by rn) next from
(select rownum+4 rn from dual connect by rownum<5);
RN PREVIOS NEXT
---------- ---------- ----------
5 -1 7
6 -1 8
7 5 -1
8 6 -1
这里,通过指定offset参数来获得两行前的内容和两行后的内容,如果offset超出范围并且未设定默认值-1,那么系统会自动将其值设为NULL。
3. 问题的解决
有了基础知识的积累,我们就可以解决前面提到的问题。
3.1 已知号码求号段
3.1.1 题例
我有一个表结构,
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125
(第二个字段内可能是连续的数据,可能存在断点。)
怎样能查询出来这样的结果,查询出连续的记录来。
就像下面的这样?
2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125
3.1.2 解答
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接