如何在28天的滑动窗口中统计不同的用户-SQL配置单元

如何在28天的滑动窗口中统计不同的用户-SQL配置单元,sql,hive,count,sliding-window,Sql,Hive,Count,Sliding Window,我试图计算在28天的窗口时间内有多少不同的用户使用一个应用程序。 例如,如果我站在2月28日,我想知道有多少不同的用户登录该应用程序。 这里的诀窍是我只想数一次。因此,如果用户22记录了28次,我希望他们也算一次 此外,用户在每个日期只能出现一次 select b.date, count(DISTINCT a.id) from table a, (SELECT distinct(date), date_sub(date,27) dt_start from table) b where a.

我试图计算在28天的窗口时间内有多少不同的用户使用一个应用程序。 例如,如果我站在2月28日,我想知道有多少不同的用户登录该应用程序。 这里的诀窍是我只想数一次。因此,如果用户22记录了28次,我希望他们也算一次

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

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

谢谢

考虑一个相关子查询:

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
或者,按窗口时段进行自连接聚合:

select t1.date, 
       count(distinct t2.id) as distinct_users_27_days
from mytable t1
cross join mytable t2 
where t2.date >= date_sub(t1.date, 27) 
  and t2.date <= t1.date
group by t1.date

考虑一个相关子查询:

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
或者,按窗口时段进行自连接聚合:

select t1.date, 
       count(distinct t2.id) as distinct_users_27_days
from mytable t1
cross join mytable t2 
where t2.date >= date_sub(t1.date, 27) 
  and t2.date <= t1.date
group by t1.date

你在使用什么数据库?Hadoop是一个并行框架。这一点非常重要,因为数据库中的日期函数各不相同。哦,对不起,我使用的是Hive。我也改变了标题。谢谢。请问您用的两张桌子是什么。只显示一个表作为输入,列与查询中的不匹配。lol我很笨。只有一个表有两列,日期和Id。我现在编辑了它。你在使用什么数据库?Hadoop是一个并行框架。这一点非常重要,因为数据库中的日期函数各不相同。哦,对不起,我使用的是Hive。我也改变了标题。谢谢。请问您用的两张桌子是什么。只显示一个表作为输入,列与查询中的不匹配。lol我很笨。只有一个表有两列,日期和Id。我现在对其进行了编辑。在第一个答案解决方案中,我得到:ParseException第2:8行无法识别表达式规范中“select”“count”附近的输入,而在第二个答案中:第5:6行在联接“27”中遇到了左别名和右别名。此外,您不能将>或