程序员の奇妙冒险

返回
常用SQL笔记 MySQL
2025-04-08 23:50 阅读:95 评论:0

MySQL之查询近30天活跃用户数

近 30天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。 解题 一个用户可能有多个 sessionid,不能用它去重 datediff('2019-07-27', activitydate),前者减后者的值 方式一 因为题目说 30 天内并且包含本日(2019-07-27),所以是小于等

近 30天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。

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
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),前者减后者的值

方式一

1
2
3
4
5
# 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天
1
2
3
4
5
# 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
评论 (0)
暂无评论 来抢沙发吧~