如何在28天的滑动窗口中计算不同的用户-SQL Hive

时间:2019-05-15 19:15:32

标签: sql hive count sliding-window

我正在尝试计算在28天的窗口时间内有多少不同的用户在使用应用程序。 例如,如果我站在2月28日,我想知道有多少不同的用户登录了该应用程序。 这里的窍门是我只想计算一次。因此,如果用户“ 22”登录28次,我希望他们将其计为1。

此外,用户每个日期只能出现一次。

select b.date, count(DISTINCT a.id)
from table a,
 (SELECT distinct(date), date_sub(date,27) dt_start
  from table) b
where a.date >= b.dt_start and a.date <= b.fecha
group by b.date

但是它不起作用

我想要的示例,带有2天的滑动窗口:

Input
Day  Id
1    A
1    B
2    C
2    A
3    B
3    D
4    D

Result:
Day   Count(distinct Id)
1     2
2     3
3     4
4     2

谢谢! :)

1 个答案:

答案 0 :(得分:0)

考虑相关子查询:

~/.vim/after/<path>/<plugin_name>

或者,按窗口周期进行的自联接聚合:

select distinct t.date, 
       (select count(distinct sub.id)
        from mytable sub
        where sub.date >= date_sub(t.date, 27) 
          and sub.date <= t.date) as distinct_users_27_days
from mytable t