【发布时间】:2019-05-08 14:13:24
【问题描述】:
情况:
我有一个包含 email 和 login_time 列的登录表。我想计算每日登录时间(DAU)和滚动每月登录时间(MAU)。 DAU 和 MAU 必须计算不同的用户。即,如果某人在过去 30 天 (MAU) 中登录 20 次,那么他只会被计算一次。同样的逻辑也适用于 DAU。 MAU 的范围是 30 天。
DAU:是通过每天使用不同的电子邮件登录来计算的。
MAU: 是通过连续 30 天的不同电子邮件登录来计算的。
期望的结果: 见下面的小提琴
Date MAU DAU
2019-04-01 4 2
2019-04-02 3 2
2019-04-03 4 2
计算 DAU 相当简单,但是获取滚动 MAU,不知道如何。
小提琴:
create table #t1 (email varchar(max), login_time datetime)
insert into #t1 values
('aa@gmail.com', '2019-03-15 00:00:00.000'),
('aa@gmail.com', '2019-04-01 00:00:00.000'),
('aa@gmail.com', '2019-04-02 00:00:00.000'),
('aa@gmail.com', '2019-04-03 00:00:00.000'),
('bb@gmail.com', '2019-03-19 00:00:00.000'),
('bb@gmail.com', '2019-04-01 00:00:00.000'),
('bb@gmail.com', '2019-04-02 00:00:00.000'),
('bb@gmail.com', '2019-04-02 00:00:00.000'),
('cc@gmail.com', '2019-03-02 00:00:00.000'),
('cc@gmail.com', '2019-04-03 00:00:00.000'),
('dd@gmail.com', '2019-03-06 00:00:00.000')
【问题讨论】:
-
你没有很好地解释 DAU 和 MAU 是如何定义的。请解释一下。
-
@GordonLinoff 完成。
-
@Cowthulhu > 2016
-
@Cowthulhu 非常重要,我正在处理的表每天要处理数十万次登录。
-
@D-Shih 不应该。在过去 30 天内是指在该 30 天范围内。此后的任何内容都不应包含在 MAU 中
标签: sql sql-server