sql – 随着时间的推移查询DAU / MAU(每日)

前端之家收集整理的这篇文章主要介绍了sql – 随着时间的推移查询DAU / MAU(每日)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个每日会话表,其中包含user_id和date列.我想每天绘制DAU / MAU(每日活跃用户/每月活跃用户).例如:
  1. Date MAU DAU DAU/MAU
  2. 2014-06-01 20,000 5,000 20%
  3. 2014-06-02 21,000 4,000 19%
  4. 2014-06-03 20,050 3,050 17%
  5. ... ... ... ...

计算每日活动量很容易计算,但计算每月活动数,例如登录日期30天的用户数量正在导致问题.如果没有每天的左连接,这是如何实现的?

编辑:我正在使用Postgres.

解决方法

假设您拥有每天的值,您可以使用子查询获取总计数,范围介于:
  1. with dau as (
  2. select date,count(userid) as dau
  3. from dailysessions ds
  4. group by date
  5. )
  6. select date,dau,sum(dau) over (order by date rows between -29 preceding and current row) as mau
  7. from dau;

不幸的是,我认为您需要不同的用户,而不仅仅是用户数.这使问题变得更加困难,特别是因为Postgres不支持count(distinct)作为窗口函数.

我认为你必须为此做一些自我加入.这是一种方法

  1. with dau as (
  2. select date,count(distinct userid) as dau
  3. from dailysessions ds
  4. group by date
  5. )
  6. select date,(select count(distinct user_id)
  7. from dailysessions ds
  8. where ds.date between date - 29 * interval '1 day' and date
  9. ) as mau
  10. from dau;

猜你在找的MsSQL相关文章