sql - 随时间查询 DAU/MAU(每天)

标签 sql postgresql

我有一个每日 session 表,其中包含列 user_id 和日期。我想绘制出每天的 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%
...          ...      ...     ...

计算每日活跃用户很简单,但计算每月活跃用户例如今天登录的用户数量减去 30 天,导致了问题。如果每天都没有左连接,这是如何实现的?

编辑:我正在使用 Postgres。

最佳答案

假设您有每一天的值,您可以使用子查询和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;

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

我认为您必须为此进行某种 self 连接。这是一种方法:

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;

关于sql - 随时间查询 DAU/MAU(每天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24494373/

相关文章:

sql - 想出算法 : Calculate full earnings for every company

sql - 根据多个条件从表中删除重复项并保留到其他表

mysql - postgresql 插入一个 null 转换为默认值?

将 Excel 数据添加到 Access 的 SQL 更新查询

Laravel 使用 postgresql 错误 array_map() : Argument #2 should be an array 验证唯一性

ruby-on-rails-3 - 在 Rails 测试中手动重新连接到数据库

laravel - 在 Laravel 中无法连接到 RDS PostgresQL SSL

python - 将单个 Pandas 数据帧导出到多个 SQL 表(自动规范化)

python - 通过 sqlalchemy 针对 MySql 运行的查询比在数据库控制台上慢得多

mysql - 检查表中的所有行是否具有唯一的列值