如何在Hive的每个时间窗口计算不同的成员?

时间:2016-12-23 07:08:59

标签: sql hive

我有这样的表,代表一个成员在一个月内买了一个产品。本月是201501至201612。 我想得到一个包含两列的新表:一个是从201501到201612的月份,另一个是count(distinct member_srl)作为member_rolling,它来自该月的前12个月的记录。 例如,新表的一个记录是“201605 123456”,数字123456是月份> ='201505'和月<的条件下的计数(distinct member_srl)。 '201605'。 那么如何以一种简单的方式快速实现这一目标呢?

member_srl  month
21197731    201501
14353419    201509
42129336    201605
10599714    201611
16162595    201501
50487249    201601
14899586    201604
29611434    201607
15374407    201608
14479686    201501
1621671     201502
20814896    201512
8185190     201501
57833156    201601
5215620     201503
60407250    201602
3510594     201501
25221577    201611
2120126     201512

1 个答案:

答案 0 :(得分:0)

你应该自己加入桌子 在月份栏中加入您想要的12个月范围 然后在相关专栏上进行汇总 类似的东西:
SELECT t1.id AS id, COUNT(DISTINCT t2.member_srl) AS member_srl_distinct_count FROM test t1 JOIN test t2 ON t1.id= t2.id OR t1.id=(t2.id-1) OR t1.id=(t2.id-2) ... GROUP BY t1.id;

在此示例中,我使用INT列(id)作为月份列,因此您需要将月份列投射到日期,以便能够向其添加/减少月数