常用SQL笔记MySQL
2025-04-08 23:50阅读:75评论:0
MySQL之查询近30天活跃用户数
近 30天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。 解题 一个用户可能有多个 sessionid,不能用它去重 datediff('2019-07-27', activitydate),前者减后者的值 方式一 因为题目说 30 天内并且包含本日(2019-07-27),所以是小于等
_PROTECTED0__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 |+------------+--------------+ 非活跃用户的记录不需要展示。 _PROTECTED0_
- 一个用户可能有多个 sessionid,不能用它去重
- datediff('2019-07-27', activity__PROTECTED_4____PROTECTED_5__1__
1
2
3
4
5
6
# Write your MySQL query statement belowselect activity_date day, count(distinct user_id) active_usersfrom Activitywhere datediff('2019-07-27', activity_date) < 30group by activity_date - 因为题目说 30 天内并且包含本日(2019-07-27),所以是小于等于 29 天,如果等于 30 的话,说明 31 天内了。
1
2
3
4
5
6
# Write your MySQL query statement belowselect activity_date day, count(distinct user_id) active_usersfrom Activitywhere activity_date > date_sub('2019-07-27', interval 30 day)group by activity_date