雁过留声 发表于 2024-8-25 19:45:41

[逐日一练]30天内活跃的用户数

标题来源于力扣:
1141. 查询近30天活跃用户数 - 力扣(LeetCode)标题要求:
表:Activity

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int   |
| session_id    | int   |
| activity_date | date    |
| activity_type | enum    |
+---------------+---------+
该表没有包含重复数据。
activity_type 列是 ENUM(category) 类型, 从 ('open_session', 'end_session', 'scroll_down', 'send_message') 取值。
该表记录社交媒体网站的用户活动。
注意,每个会话只属于一个用户。


编写解决方案,统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。

以 任意顺序 返回结果表。  思绪流程:

即要求在停止 2019-07-27内的逐日不同用户数量。
起首,我们要输出统计已往重后的用户,利用 COUNT(DISTINCT user_id) 即可
其次,我们要统计在2019-07-27截止日期30内的天数:
    方法1: activity_date between "2019-06-28" and "2019-07-27"
    方法2:datediff("2019-07-27",activity_date) between 0 and 29
个人推荐利用方法2来进行计算,方法1要人工计算天数日期,而方法2利用datediff日期差值计算函数,可以自动计算出"2019-07-27"和登陆日期的差值,只要这个差值在0-29内(30天的天数,包含截止日期),即可实现需求,而且灵活性更强盛,可以适应多种情况
最后按天数进行分组,即可看出每天的不同用户数量了
代码实现:

# Write your MySQL query statement below
select activity_date as day , count(DISTINCT user_id) as active_users
from Activity
wheredatediff("2019-07-27",activity_date) between 0 and 29
group by activity_date

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: [逐日一练]30天内活跃的用户数