—— 阿尔伯特·爱因斯坦

程序员の奇妙冒险

常用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 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 天内了。
_PROTECTED1_PROTECTED2_PROTECTED0__前者减去30天
1
2
3
4
5
6
# 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)
暂无评论来抢沙发吧~