Teradata preceeding/flowing

Teradata preceeding/flowing

表示以前没玩过,智商捉急啦。
Description:找出任意连续三个月有操作而其第四个月没有操作的用户,时间范围一年之内。
Table: user
Column:month_id(一年之内),user_id, action(抽象化为1,0)
 1 SELECT   DISTINCT  d. user_id
 2 FROM
 3 (
 4 SELECT  c. user_id
 5 , AVG ( c.action )  OVER  ( PARTITION  BY  c. user_id   ORDER   BY  c.month_id ROWS  BETWEEN   2  PRECEDING  AND   0  FOLLOWING)  m3
 6 , AVG ( c.action )  OVER  ( PARTITION  BY  c. user_id   ORDER   BY  c.month_id ROWS  BETWEEN   3  PRECEDING  AND   0  FOLLOWING)  m4
 7 FROM
 8 user  c
 9 ) d
10 --  no action on 4th month
11 QUALIFY  SUM  (d.m4)  OVER  (PARTITION  BY  d. user_id    ORDER   BY  d.month_id    ROWS  BETWEEN    1    FOLLOWING   AND    1    FOLLOWING )   <   1
12 -- did something continuesly in 3 months
13 AND  m3  = 1
14 AND  m4 <> 1

m3算出前三个月的average(moving average的标准算法in Teradata),同理m4算出前四个月moving average。
最后选择前三个月有过action,即m3=1且第四个月即qualify中m4<1的结果集。
另外排除四个月连续具有action而第五个月没有的用户m4<>1,此类用户不属于需要被选择的用户。

对于PRECEDING和FOLLOWING不熟悉,2 PRECEDING 前两行,0 FOLLOWING后0行,即到当前行,也可以直接不写between,直接写2 PRECEDING,默认表示到当前位置作一个计算。


你可能感兴趣的:(Teradata preceeding/flowing)