sql-按日期范围分组(teradata)

我有这样的数据:

Date             User ID
2012-10-11         a
2012-10-11         b
2012-10-12         c
2012-10-12         d 
2012-10-13         e
2012-10-14         b
2012-10-14         e

我想做的是将每天的最近两天范围(在我的实际查询中为7天)进行分组,并获得不同用户ID的计数.

例如,我希望结果看起来像这样:

Date             count(distinct userIDs)
2012-10-12         4
2012-10-13         3
2012-10-14         2

例如对于2012-10-12,我得到的计数为4,因为我有“ a”,“ b”,“ c”和“ d”. ‘==>
“ a”和“ b”来自前一天,而“ c”和“ d”来自同一天,2012-10-12.

同样,对于2012-10-13,我查看的是2012-10-13和2012-10-12,得到的是’c’,’d’和’e’.

日期列的数据类型是日期.我正在使用Teradata.

我一直在尝试进行研究,但找不到适用于我的情况的简单答案. :-/对不起,如果是重复的话.非常感谢您的帮助.谢谢!

最佳答案
要执行所需的操作,实际上需要“乘以”数据,因为每一行都可以包含在两个日期中以进行最终汇总.

我认为最简单的方法是全部合并方法:

select date, count(distinct userId)
from ((select date, UserId
       from t
      ) union all
      (select date + 1, UserId     -- combine with yesterday's data
       from t
      )
     ) t
group by date;

因为您要处理7天,所以这里有另一种方法:

select (t.date + n), count(distinct t.UserId)
from t cross join
     (select 0 as n union all select 1 union all select 2 union all select 3 union all
      select 4 union all select 5 union all select 6
     ) n
group by t.date + n;

转载注明原文:sql-按日期范围分组(teradata) - 代码日志