欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

lead over 和 lag over

程序员文章站 2022-07-01 20:35:04
今天在熟悉项目的某个功能模块时,查看mybatis的映射文件内发现这样的一串sql: 因原来进行开发时,并没有用到此函数 所以在网上查询了一点资料 对leadover的解释如下: 换句话说就是通过这个函数能拿到当前列之前的第n条数据 例子: 目前有如下内容的一张表: 执行之后是这样的result: ......

今天在熟悉项目的某个功能模块时,查看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:

  lead over 和 lag over

     再执行以下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为:

  lead over 和 lag over

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

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

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