输入:
Activity
表:
用户ID | session_id | 活动日期 | 活动类型 |
---|---|---|---|
1 | 1 | 2019-07-20 | 开放会话 |
1 | 1 | 2019-07-20 | 向下滚动 |
1 | 1 | 2019-07-20 | 结束_会话 |
2 | 4 | 2019-07-20 | 开放会话 |
2 | 4 | 2019-07-19 | 发送消息 |
2 | 4 | 2019-07-19 | 结束_会话 |
3 | 2 | 2019-07-19 | 开放会话 |
3 | 2 | 2019-07-19 | 发送消息 |
3 | 2 | 2019-07-19 | 结束_会话 |
4 | 3 | 2019-06-25 | 开放会话 |
4 | 3 | 2019-06-25 | 结束_会话 |
4 | 3 | 2019-06-20 | 开放会话 |
4 | 3 | 2019-06-20 | 结束_会话 |
5 | 6 | 2019-06-03 | 开放会话 |
5 | 6 | 2019-06-03 | 向下滚动 |
5 | 6 | 2019-06-03 | 结束_会话 |
6 | 8 | 2019-05-25 | 开放会话 |
6 | 8 | 2019-05-25 | 发送消息 |
6 | 8 | 2019-05-25 | 结束_会话 |
7 | 9 | 2019-05-10 | 开放会话 |
7 | 9 | 2019-05-10 | 结束_会话 |
7 | 9 | 2019-04-25 | 开放会话 |
7 | 9 | 2019-04-25 | 结束_会话 |
8 | 7 | 2019-04-20 | 开放会话 |
8 | 7 | 2019-04-20 | 结束_会话 |
所需输出:
月 | 活跃用户 |
---|---|
2019-07 | 3 |
2019-06 | 2 |
2019-05 | 2 |
2019-04 | 2 |
编写一个解决方案来查找每月的每日活跃用户数。如果用户在某一天至少进行了一项活动,则该用户在某一天处于活跃状态。
原来的问题要简单得多,它只需要找到以
30
结尾的 2019-07-27
天(包含在内)的每日活跃用户数,我解决了它,所以我升级了它,但一直在努力解决它。你们能帮助我使用可以将这些 Activity_date 分组为月份的语法吗?
在 MySQL 中你可以这样做:
SELECT
DATE_FORMAT(activity_date, '%Y-%m') AS month,
COUNT(DISTINCT user_id) AS active_users
FROM
activity
WHERE
activity_date <= '2019-07-27'
GROUP BY
month
ORDER BY
month;