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