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