在90天的窗口中,我有多少不同的活跃用户?

giu*_*tti 5 sql postgresql amazon-redshift

我有一个复杂的问题,一见钟情似乎微不足道:

  • 对于给定的90天窗口,我有多少不同的活跃用户?

我将用于查询的表是登录表(在Redshift中托管),它具有logintime和usertoken作为用户标识符的时间戳.

每当我想在一天内回答这个问题时,查询就很简单明了:

select count (distinct usertoken)
from logins
where datediff('d',logintime,getdate()) <= 90
Run Code Online (Sandbox Code Playgroud)

问题变得复杂,因为我希望在每个给定日期的数字表中都有这个.

07/07  100k
07/06  98k
07/05  99k
07/04  101k
Run Code Online (Sandbox Code Playgroud)

(......)

窗口函数对我没有帮助,因为我需要计算明显,这在窗口函数中是不可能的.

据我所知,没有办法迭代SQL查询.

我该怎么办呢?

Gor*_*off 0

这种简单的方法在计算上非常昂贵:

select days.d, count(distinct l.userid)
from (select distinct date_trunc('day', logintime) as d
      from logins l
     ) days left join
     (select distinct userid, date_trunc('day', logintime) as d
      from logins
     ) l
     on datediff('d', l.d, days.d) between 0 and 89
group by days.d
order by days.d;
Run Code Online (Sandbox Code Playgroud)