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