假设有一个客户之前下了订单,想看看这次订单距离下一次下单时间相差多少天,这类问题可以通过 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