lead over 和 lag over
程序员文章站
2022-04-11 21:11:49
今天在熟悉项目的某个功能模块时,查看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:
再执行以下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正好相反
这两个函数可以在需要根据某一列的上一条或者下一条数据进行判断的时候派上用场~
上一篇: 重新理解闭包
推荐阅读
-
SQL中distinct 和 row_number() over() 的区别及用法
-
使用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤
-
SQL中distinct 和 row_number() over() 的区别及用法
-
lead over 和 lag over
-
使用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤
-
SQLServer的Lead和Lag如何实现?
-
解析数据库分页的两种方法对比(row_number()over()和top的对比)_MySQL
-
【转】oracle的LAG和LEAD分析函数
-
oracle 统计分析函数之lead和lag
-
Oracle的lead和lag函数