WEB开发网
开发学院数据库Oracle Oracle层次查询和分析函数在号段选取中的应用 阅读

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 解答

Tags:Oracle 层次 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接