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

 

 

 

posted @ 2021-11-09 11:54  托马斯骨头收集  阅读(1295)  评论(0编辑  收藏  举报