-- 偏移分析函數(shù)
-- 需求10: 查詢出支付時間間隔超過100天的用戶數(shù)
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;
知識點總結(jié)
Lag和Lead函數(shù)可以在同一次查詢中取出同一字段的前N行的數(shù)據(jù)(Lag)和后N行的數(shù)據(jù)(Lead)
作為 獨立的列。
在實際應(yīng)用當中,若要用到取今天和昨天的某字段差值時,Lag和Lead函數(shù)的應(yīng)用就顯得尤為重
要。
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個的值,假設(shè)當前行在表中排在第5
行,則offffset 為3,則表示我 們所要找的數(shù)據(jù)行就是表中的第2行(即5-3=2)。offffset默認值為1。
defval默認值,當兩個函數(shù)取上N/下N個值,當在表中從當前行位置向前數(shù)N行已經(jīng)超出了表的
范 圍時,lag()函數(shù)將defval這個參數(shù)值作為函數(shù)的返回值,若沒有指定默認值,則返回NULL,
那么 在數(shù)學運算中,總要給一個默認值才不會出錯。