天天看点

oracle lead() over,Oracle数据库之lead over 和 lag over

本文主要向大家介绍了Oracle数据库之lead over 和 lag over,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

今天在熟悉项目的某个功能模块时,查看mybatis的映射文件内发现这样的一串sql:

(T.NET_VALUE - LEAD(T.NET_VALUE)OVER(ORDER BY T.ESTIMATE_DATE DESC, T.NET_VALUE)) / LEAD(T.NET_VALUE) OVER(ORDER BY T.ESTIMATE_DATE DESC,T.NET_VALUE)

因原来进行开发时,并没有用到此函数 所以在网上查询了一点资料 对leadover的解释如下:

Lead分析函数可以在同一次查询中获取第N行后同样字段的数据作为独立的列

换句话说就是通过这个函数能拿到当前列之前的第n条数据

例子:

目前有如下内容的一张表:

复制代码

select rownum rn, temp.*

from (select 1 as id from dual

union

select 2 as id from dual

union

select 3 as id from dual

union

select 4 as id from dual) temp

复制代码

执行之后是这样的result:

再执行以下sql:

复制代码

select t.rn,

lead(t.rn) over(order by t.rn ) as next_val,

from (select rownum rn, temp.*

from (select 1 as id from dual

union

select 2 as id from dual

union

select 3 as id from dual

union

select 4 as id from dual) temp) t;

复制代码

执行完之后result为:

可见函数的返回值是下一条数据的rn这一列

跟lead函数相似的还有lag函数 不过lag函数式获取上一条的数据 跟lead正好相反

这两个函数可以在需要根据某一列的上一条或者下一条数据进行判断的时候派上用场~

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!