我有一个每日会话表,其中包含user_id和date列.我想每天绘制DAU/MAU(每日活跃用户/每月活跃用户).例如:
Date MAU DAU DAU/MAU
2014-06-01 20,000 5,000 20%
2014-06-02 21,000 4,000 19%
2014-06-03 20,050 3,050 17%
... ... ... ...
Run Code Online (Sandbox Code Playgroud)
计算每日活动数据很容易计算,但计算每月活动数据,例如记录日期30天的用户数量,会导致问题.如果没有每天的左连接,这是如何实现的?
编辑:我正在使用Postgres.
Gor*_*off 12
假设您拥有每天的值,您可以使用子查询获取总计数range between
:
with dau as (
select date, count(userid) as dau
from dailysessions ds
group by date
)
select date, dau,
sum(dau) over (order by date rows between -29 preceding and current row) as mau
from dau;
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为您需要不同的用户,而不仅仅是用户数.这使问题变得更加困难,特别是因为Postgres不支持count(distinct)
作为窗函数.
我认为你必须为此做一些自我加入.这是一种方法:
with dau as (
select date, count(distinct userid) as dau
from dailysessions ds
group by date
)
select date, dau,
(select count(distinct user_id)
from dailysessions ds
where ds.date between date - 29 * interval '1 day' and date
) as mau
from dau;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10665 次 |
最近记录: |