news 2026/5/27 4:38:08

力扣1709-访问日期之间的最大的空档期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣1709-访问日期之间的最大的空档期

表:UserVisits

+-------------+------+ | Column Name | Type | +-------------+------+ | user_id | int | | visit_date | date | +-------------+------+ 该表没有主键,它可能有重复的行 该表包含用户访问某特定零售商的日期日志。

假设今天的日期是'2021-1-1'

编写解决方案,对于每个user_id,求出每次访问及其下一个访问(若该次访问是最后一次,则为今天)之间最大的空档期天数window

返回结果表,按用户编号user_id排序。

结果格式如下示例所示:

示例 1:

输入: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 | +---------+---------------+解释:对于第一个用户,问题中的空档期在以下日期之间: - 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 天。

思路:

  • 本题的目标是计算每个用户两次访问之间的最大时间间隔,其中最后一次访问需要与固定日期2021-01-01进行比较。

  • 首先以uservisits表为基础,按照user_id分组,并按visit_date升序排列,使用分析函数LEAD(visit_date)获取同一用户的下一次访问日期。

  • 对于存在下一次访问的记录,直接计算当前访问日期与下一次访问日期之间的日期差。

  • 对于某个用户的最后一次访问,由于LEAD函数返回NULL,因此使用CASE WHEN将下一次访问日期替换为固定日期2021-01-01,以保证时间间隔计算的完整性。

  • 使用ABS函数对日期差取绝对值,确保结果为正数,得到每次访问之间的时间间隔。

  • 将上述计算结果放入公共表表达式(CTE)中,得到每个用户每次访问对应的时间间隔。

  • 最后在外层查询中,按user_id分组,对每个用户的所有时间间隔取最大值,即得到该用户的最大访问间隔biggest_window

代码:

with t as( select user_id, abs(visit_date - case when lead(visit_date) over( partition by user_id order by visit_date ) is null then date '2021-01-01' else lead(visit_date) over( partition by user_id order by visit_date ) end ) as diff from uservisits ) select user_id,max(diff) as biggest_window from t group by user_id
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 21:18:38

Java SpringBoot+Vue3+MyBatis 企业项目管理系统系统源码|前后端分离+MySQL数据库

摘要 随着企业规模的不断扩大和业务复杂度的提升,传统的项目管理方式已难以满足高效协作和资源优化的需求。企业项目管理系统的开发旨在通过信息化手段提升项目规划、任务分配、进度跟踪和团队协作的效率。该系统能够整合项目全生命周期的数据,实现资源的…

作者头像 李华
网站建设 2026/5/26 5:36:34

外科医疗问答数据集_115991条专业医生回答_涵盖外科疾病手术相关问题_完整问答对数据_可用于医疗AI训练和智能问答系统开发

引言与背景 外科作为医学领域的重要分支,涉及大量专业知识和临床经验。随着人工智能技术在医疗健康领域的快速发展,高质量的医疗问答数据集对于训练医疗AI模型、开发智能问答系统、辅助医生诊断等应用场景具有重要价值。 本数据集是一个专门针对外科领…

作者头像 李华