【Leetcode】高频SQL基础题--1141.查询近30天活跃用户数

发布于:2025-09-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

【Leetcode】高频SQL基础题–1141.查询近30天活跃用户数

要求:编写解决方案,统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。
以 任意顺序 返回结果表。

解题思路:
1、先用 HWHERE 过滤,只处理2019-06-28至2019-07-27之间的记录;
2、然后按照 activity_date 进行分组;
3、最后使用COUNT(DISTINCT user_id)统计每日唯一用户数。

重点:
1、如何表示时间范围:2019-06-28至2019-07-27

activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27'

activity_date BETWEEN DATE_ADD('2019-07-27',INTERVAL -29 day) AND '2019-07-27'

DATEDIFF("2019-07-27",activity_date) BETWEEN 0 AND 29

activity_date BETWEEN '2019-06-28' AND '2019-07-27'

2、日期时间计算:

--日期加法	例如:DATE_ADD('2023-10-15', INTERVAL 1 DAY) → 2023-10-16
DATE_ADD(date, INTERVAL expr unit)	
--日期减法	例如:DATE_SUB('2023-10-15', INTERVAL 1 MONTH) → 2023-09-15
DATE_SUB(date, INTERVAL expr unit)	
--同 DATE_ADD	
ADDDATE(date, INTERVAL expr unit)	
--同 DATE_SUB	
SUBDATE(date, INTERVAL expr unit)
--日期差(天数)	DATEDIFF('2023-10-20', '2023-10-15') → 5	
DATEDIFF(date1, date2)
--时间差	TIMEDIFF('14:30:00', '12:00:00') → 02:30:00
TIMEDIFF(time1, time2)	
--时间差(指定单位)	TIMESTAMPDIFF(MONTH, '2023-01-01', '2023-10-15') → 9
TIMESTAMPDIFF(unit, start, end)	

代码:

SELECT 
    activity_date AS day,
    COUNT(DISTINCT user_id) AS active_users
FROM
    Activity
WHERE 
    activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27'
GROUP BY activity_date


网站公告

今日签到

点亮在社区的每一天
去签到