我们有一个包含以下列的表格:
SESSION_ID USER_ID CONNECT_TS
-------------- --------------- ---------------
1 99 2013-01-01 2:23:33
2 101 2013-01-01 2:23:55
3 104 2013-01-01 2:24:41
4 101 2013-01-01 2:24:43
5 233 2013-01-01 2:25:01
我们需要获取每天的用户数量和“活跃用户”的数量,这些用户被定义为在过去 45 天内使用过该应用程序的用户。这是我们想出的,但我觉得必须有更好的方法:
select trunc(a.connect_ts)
, count(distinct a.user_id) daily_users
, count(distinct b.user_id) active_users
from sessions a
join sessions b
on (b.connect_ts between trunc(a.connect_ts) - 45 and trunc(a.connect_ts))
where a.connect_ts between '01-jan-13' and '12-jun-13'
and b.connect_ts between '01-nov-12' and '12-jun-13'
group by trunc(a.connect_ts);
我们查看了窗口函数,但看起来不支持不同的计数。我们还考虑过首先将聚合加载到临时表中,但不同的计数再次排除了它。有没有更好的方法来做到这一点?