news 2026/5/1 10:08:24

力扣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/1 6:54:41

博落回基因组--文献精读186

The Genome of Medicinal Plant Macleaya cordata Provides New Insights into Benzylisoquinoline Alkaloids Metabolism药用植物博落回基因组为苄基异喹啉生物碱代谢研究提供新见解摘要动物养殖业与医学领域中抗生素的过度使用已对公共卫生构成一系列潜在威胁。博落回&#x…

作者头像 李华
网站建设 2026/5/1 6:53:53

7.1 机器学习基本框架:数据、假设空间、学习算法与评估

7.1 机器学习基本框架:数据、假设空间、学习算法与评估 机器学习赋予计算机从经验数据中学习并改进其性能的能力,而无需进行明确的、基于规则的编程。其所有理论与应用均建立在一个统一的形式化框架之上,该框架包含四个核心要素:数据、假设空间、学习算法和评估。本节旨在…

作者头像 李华
网站建设 2026/5/1 6:57:22

SpringBoot+Vue 考试系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着信息技术的飞速发展,传统考试模式已难以满足现代教育对高效、公平和智能化的需求。纸质考试存在组织成本高、阅卷效率低、成绩统计繁琐等问题,而在线考试系统能够有效解决这些痛点。基于此,设计并实现一个基于SpringBoot和Vue的在线…

作者头像 李华
网站建设 2026/5/1 9:32:26

Java Web 手机销售网站系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着移动互联网技术的快速发展和智能手机的普及,手机销售行业迎来了巨大的市场机遇。传统的线下销售模式逐渐向线上转移,消费者更倾向于通过电子商务平台购买手机,这促使手机销售网站系统的开发需求日益增长。当前市场上许多手机销售平台…

作者头像 李华