情况:

我有一个包含 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/

10-10 13:07