-- 偏移分析函数
-- 需求10: 查询出支付时间间隔超过100天的用户数
SELECT
count( DISTINCT a.user_name )
FROM
( SELECT user_name, pay_time, lead( pay_time ) over ( PARTITION BY user_name ORDER BY pay_time ) lead1 FROM user_trade ) a
WHERE
DATEDIFF( a.lead1, a.pay_time )> 100;
知识点总结
Lag和Lead函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)
作为 独立的列。
在实际应用当中,若要用到取今天和昨天的某字段差值时,Lag和Lead函数的应用就显得尤为重
要。
lag(exp_str,offffset,defval) over(partion by ......order by ......)
lead(exp_str,offffset,defval) over(partion by ......order by ......)
exp_str是字段名称。 offffset是偏移量,即是上1个或上N个的值,假设当前行在表中排在第5
行,则offffset 为3,则表示我 们所要找的数据行就是表中的第2行(即5-3=2)。offffset默认值为1。
defval默认值,当两个函数取上N/下N个值,当在表中从当前行位置向前数N行已经超出了表的
范 围时,lag()函数将defval这个参数值作为函数的返回值,若没有指定默认值,则返回NULL,
那么 在数学运算中,总要给一个默认值才不会出错。