今天在熟悉项目的某个功能模块时,查看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正好相反
这两个函数可以在需要根据某一列的上一条或者下一条数据进行判断的时候派上用场~