旅游网站模板文章,好看的个人网站设计,开网站做代销好,梅州网站建设公司力扣题
1、题目地址
1709. 访问日期之间最大的空档期
2、模拟表
表#xff1a;UserVisits
Column NameTypeuser_idintvisit_datedate
该表没有主键#xff0c;它可能有重复的行该表包含用户访问某特定零售商的日期日志。
3、要求
假设今天的日期是 ‘2021-1-1’ 。
…力扣题
1、题目地址
1709. 访问日期之间最大的空档期
2、模拟表
表UserVisits
Column NameTypeuser_idintvisit_datedate
该表没有主键它可能有重复的行该表包含用户访问某特定零售商的日期日志。
3、要求
假设今天的日期是 ‘2021-1-1’ 。
编写解决方案对于每个 user_id 求出每次访问及其下一个访问若该次访问是最后一次则为今天之间最大的空档期天数 window
返回结果表按用户编号 user_id 排序。
结果格式如下示例所示
示例 1
输入 UserVisits 表
user_idvisit_date12020-11-2812020-10-2012020-12-322020-10-522020-12-932020-11-11
输出
user_idbiggest_window139265351
解释
对于第一个用户问题中的空档期在以下日期之间
2020-10-20 至 2020-11-28 共计 39 天。2020-11-28 至 2020-12-3 共计 5 天。2020-12-3 至 2021-1-1 共计 29 天。
由此得出最大的空档期为 39 天。 对于第二个用户问题中的空档期在以下日期之间
2020-10-5 至 2020-12-9 共计 65 天。2020-12-9 至 2021-1-1 共计 23 天。
由此得出最大的空档期为 65 天。 对于第三个用户问题中的唯一空档期在 2020-11-11 至 2021-1-1 之间共计 51 天。
4、代码编写
Lead (列名) 语法
SELECT user_id, MAX(biggest_window) AS biggest_window
FROM (SELECT *, DATEDIFF(IFNULL(Lead(visit_date) over (partition by user_id order by visit_date), 2021-1-1), visit_date) AS biggest_windowFROM UserVisits
) AS one
GROUP BY user_id如果加 IFNULL
SELECT *, DATEDIFF(IFNULL(Lead(visit_date) over (partition by user_id order by visit_date), 2021-1-1), visit_date
) AS biggest_window
FROM UserVisits| user_id | visit_date | biggest_window |
| ------- | ---------- | -------------- |
| 1 | 2020-10-20 | 39 |
| 1 | 2020-11-28 | 5 |
| 1 | 2020-12-03 | 29 |
| 2 | 2020-10-05 | 65 |
| 2 | 2020-12-09 | 23 |
| 3 | 2020-11-11 | 51 |如果不加 IFNULL还需要特别处理
SELECT *, DATEDIFF(Lead(visit_date) over (partition by user_id order by visit_date), visit_date
) AS biggest_window
FROM UserVisits| user_id | visit_date | biggest_window |
| ------- | ---------- | -------------- |
| 1 | 2020-10-20 | 39 |
| 1 | 2020-11-28 | 5 |
| 1 | 2020-12-03 | null |
| 2 | 2020-10-05 | 65 |
| 2 | 2020-12-09 | null |
| 3 | 2020-11-11 | null |Lead (列名, 偏移量, 超出记录窗口时的默认值) 语法
SELECT user_id, MAX(biggest_window) AS biggest_window
FROM (SELECT *, DATEDIFF(Lead(visit_date, 1, 2021-01-01) over (partition by user_id order by visit_date), visit_date) AS biggest_windowFROM UserVisits
) AS one
GROUP BY user_id以前文章
【MySQL】窗口函数 Lead 和 Lag 的运用MySQL版本8以及 时间差函数 TIMESTAMPDIFF 的运用