ORACLE中 lag()与lead() 函数


lag与lead函数是跟偏移量相关的两个分析函数,

这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。

通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤。

over()表示 lag()与lead()操作的数据都在over()的范围内。

语法:lead(field, num, defaultvalue)

field需要查找的字段,num往后查找的num行的数据,defaultvalue没有符合条件的默认值。

 

LAG(sale_price,1) 即代表前一行的数
LEAD(sale_price,1)即代表后一行的数
SELECT product_id, product_name, product_type, sale_price,
LAG(sale_price,1) OVER ( PARTITION BY product_type ORDER BY sale_price  ) AS current_LAG,
LEAD(sale_price,1) OVER ( PARTITION BY product_type ORDER BY sale_price  ) AS current_LEAD
FROM Product;

 

 

1、表机构与初始化数据如下

 加不加partition by的区别

 

select t.id id,
t.cphm,
lag(t.id, 1, null) over(order by t.id) lag_record_id,
lag(t.id, 1, null) over(partition by cphm order by t.id) lag_same_cphm_id,
lead(t.id, 1, null) over(order by t.id) lead_record_id,
lead(t.id, 1, null) over(partition by cphm order by t.id) lead_same_cphm_id
from tb_test t
order by t.id asc

 不加partition by的就是对全数据进行order

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM