情况:
我有一个包含 email 和 login_time 列的登录表。我想计算每日登录时间 (DAU) 和滚动每月登录时间 (MAU)。 DAU 和 MAU 必须计算不同的用户。即如果有人在过去 30 天 (MAU) 内登录 20 次,那么他只被计算一次。 DAU 也是同样的逻辑。 MAU 的范围是 30 天。
DAU: 是通过每天不同的电子邮件登录来计算的。
MAU: 是通过连续 30 天的不同电子邮件登录来计算的。
期望结果: 见下面的 fiddle
Date MAU DAU
2019-04-01 4 2
2019-04-02 3 2
2019-04-03 4 2
计算 DAU 相当简单,但是获得滚动 MAU,不确定如何。
fiddle :
create table #t1 (email varchar(max), login_time datetime)
insert into #t1 values
('[email protected]', '2019-03-15 00:00:00.000'),
('[email protected]', '2019-04-01 00:00:00.000'),
('[email protected]', '2019-04-02 00:00:00.000'),
('[email protected]', '2019-04-03 00:00:00.000'),
('[email protected]', '2019-03-19 00:00:00.000'),
('[email protected]', '2019-04-01 00:00:00.000'),
('[email protected]', '2019-04-02 00:00:00.000'),
('[email protected]', '2019-04-02 00:00:00.000'),
('[email protected]', '2019-03-02 00:00:00.000'),
('[email protected]', '2019-04-03 00:00:00.000'),
('[email protected]', '2019-03-06 00:00:00.000')
最佳答案
这是一种方法。
SELECT login_time,
m.MAU,
COUNT(DISTINCT email) AS DAU
FROM #t1 d
CROSS APPLY (SELECT COUNT( DISTINCT email) AS MAU
FROM #t1 m
WHERE m.login_time BETWEEN DATEADD( dd, -30, d.login_time) AND d.login_time) m
GROUP BY login_time, m.MAU
ORDER BY login_time;
关于sql - 使用 T-SQL 滚动 DAU、MAU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56042824/