假设今天的日期是 ‘2021-1-1’ 。编写 SQL 语句,对于每个 user_id ,求出每次访问及其下一个访问(若该次访问是最后一次,则为今天)之间最大的空档期天数 window 。返回结果表,按用户编号 user_id 排序。
查询格式如下示例所示:
UserVisits 表:
| user_id | visit_date |
|---|---|
| 1 | 2020-11-28 |
| 1 | 2020-10-20 |
| 1 | 2020-12-3 |
| 2 | 2020-10-5 |
| 2 | 2020-12-9 |
| 3 | 2020-11-11 |
结果表:
| user_id | biggest_window |
|---|---|
| 1 | 39 |
| 2 | 65 |
| 3 | 51 |
求出每个用户的最大空档期: 首先先求出用户的每一次空档期, 最后找出每个用户的最大值
一、求每个用户的每次空档期:
partation by user_idorder by visit_date asc datediff(下一个访问日,访问日)lead(visit_date,1) over(partation by user_id order by visit_date asc)lead(visit_date, 1, "2021-1-1") over(partation by user_id order by visit_date asc)select user_id,
datediff(lead(visit_date, 1, "2021-1-1") over(partation by user_id order by visit_date asc),
visit_date) as windows
from UserVisits
二、找出每个用户的最大值
在1的结果上,使用 group 和max, 根据user_id 找出最大值
select user_id, max(windows) as biggest_window
from (select user_id,
datediff(
lead(visit_date, 1, "2021-01-01") over (partition by user_id order by visit_date asc)
, visit_date
) as windows
from UserVisits) as temp
group by user_id;
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/biggest-window-between-visits