近 30天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。
Activity table:
+---------+------------+---------------+---------------+
| user_id | session_id | activity_date | activity_type |
+---------+------------+---------------+---------------+
| 1 | 1 | 2019-07-20 | open_session |
| 1 | 1 | 2019-07-20 | scroll_down |
| 1 | 1 | 2019-07-20 | end_session |
| 2 | 4 | 2019-07-20 | open_session |
| 2 | 4 | 2019-07-21 | send_message |
| 2 | 4 | 2019-07-21 | end_session |
| 3 | 2 | 2019-07-21 | open_session |
| 3 | 2 | 2019-07-21 | send_message |
| 3 | 2 | 2019-07-21 | end_session |
| 4 | 3 | 2019-06-25 | open_session |
| 4 | 3 | 2019-06-25 | end_session |
+---------+------------+---------------+---------------+
Result table:
+------------+--------------+
| day | active_users |
+------------+--------------+
| 2019-07-20 | 2 |
| 2019-07-21 | 2 |
+------------+--------------+
非活跃用户的记录不需要展示。
解题
- 一个用户可能有多个 session_id,不能用它去重
- datediff('2019-07-27', activity_date),前者减后者的值
方式一
# Write your MySQL query statement below
select activity_date day, count(distinct user_id) active_users
from Activity
where datediff('2019-07-27', activity_date) < 30
group by activity_date
- 因为题目说 30 天内并且包含本日(2019-07-27),所以是小于等于 29 天,如果等于 30 的话,说明 31 天内了。
方式二
date_sub('2019-07-27', interval 30 day)
前者减去30天
# Write your MySQL query statement below
select activity_date day, count(distinct user_id) active_users
from Activity
where activity_date > date_sub('2019-07-27', interval 30 day)
group by activity_date