当前位置: 首页 > 面试题库 >

查询一段时间内的DAU / MAU

唐弘益
2023-03-14
问题内容

我有一个带有session_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%
...          ...      ...     ...

计算每日活动量很容易直接计算,但是计算每月活动量(例如,登录日期为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)作为窗口函数。

我认为您必须为此进行某种形式的自我加入。这是一种方法:

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;


 类似资料:
  • 我需要计算普罗米修斯度量在给定时间框架内的唯一标签集的数量。例如,“在过去7天的某个时候,有多少唯一标签集的值为1。” 我已经使用和进行了研究,但是只对即时向量进行操作,这意味着我可以在时间上获得一个实例的唯一标签集的数量,但不能在时间框架内获得总数。返回没有用的值的数量,因为我需要知道标签集的数量,而不是每个标签集有多少值。 基本上我想要像

  • 时间比较 使用where方法 where方法支持时间比较,例如: // 大于某个时间 where('create_time', '> time', '2016-1-1'); // 小于某个时间 where('create_time', '<= time', '2016-1-1'); // 时间区间查询 where('create_time', 'between time', ['2015-1-1'

  • 我的用例——我是一名医生。在某一天,我可以工作几个小时,但有些时间不可用。我想创建一个对象“周期我的工作日”。当有人预约上午8点到9点(即“周期病人1预约”)时,该时段将从我的工作日“删除”。当新患者访问myWorkDay时,他只看到myWorkDay-病人1约会。如果病人1释放了他的时隙,那么新患者会看到完整的myWorkDay。 有可能使用JodaTime做到这一点吗? 有一个额外的要求是不必

  • 问题内容: 我有一个可能每天运行几次的应用程序。每次运行都会生成写入表的数据,以报告发生的事件。主报告表如下所示: 我可以说有两次运行,但是我想要一种能够查询日期范围(运行过程的次数)的方法。我想查询一个查询,该查询导致进程开始的时间和组中的文件数。这种查询可以让我了解我想要的东西,因为我可以看到什么日期和时间以及运行了多少文件,但不完全是我想要的。例如,它不能适应从8:58到9:04的运行。例如

  • 问题内容: 我有带有Timestmap类型的版本控制字段的表。现在,我试图通过该字段进行搜索查询,但是当我以另一种方式传递参数时: 它将它作为DateTime传递给sql查询。还尝试了NHibernateUtil.Binary,但是nhibernate将其作为varbinary传递。 问题答案: NHibernate TimestampType指定: 该类型与DateTime几乎完全相同,但可以在

  • 索引时间字段提升和查询时间提升 Lucene的FAQ似乎与javadoc冲突。(Lucene 4.9.0) 常见问题: 索引时间字段增强(field.set增强(增强))是一种表达类似于“此文档的标题价值是大多数文档标题的两倍”的方式。查询时间提升(query.setBoost(提升))是表达“我关心查询的这个子句上的匹配是关心查询的其他子句上的匹配的两倍”的一种方式。 如果您在每个文档上设置索引