假設有一個客戶之前下了訂單,想看看這次訂單距離下一次下單時間相差多少天,這類問題可以通過 lead 函數來求解,Lag和Lead函數可以在同一次查詢中取出同一字段的前N行的數據(Lag)和後N行的數據(Lead)作爲獨立的列。實際應用當中,相比於 left join 等自連接方式的sql更加簡潔。
函數語法:
lag(exp_str,offset,defval) over(partition by ..order by …)
lead(exp_str,offset,defval) over(partition by ..order by …)
其中exp_str是字段名(本例中爲交易時間 order_time),offset是偏移量(本例中爲1),defval默認值可以不定義。
代碼如下:
select id,order_time
#上一次訂單時間
,lag(order_time,1) over(partition by id order by order_time) last_order_time
#下一次訂單時間
,lead(order_time,1) over(partition by id order by order_time) next_order_time
from order_main_table