Hello World

Best wishes

常用链接

统计

最新评论

Teradata preceeding/flowing

表示以前没玩过,智商捉急啦。
Description:找出任意连续三个月有操作而其第四个月没有操作的用户,时间范围一年之内。
Table: user
Column:month_id(一年之内),user_id, action(抽象化为1,0)
 1SELECT DISTINCT d.user_id
 2FROM
 3(
 4SELECT 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
 7FROM
 8user c
 9) d
10-- no action on 4th month
11QUALIFY 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
13AND m3 =1
14AND 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,默认表示到当前位置作一个计算。


posted on 2013-09-16 23:15 hxxrainbow 阅读(299) 评论(0)  编辑 收藏 引用 所属分类: Teradata


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理