news 2026/6/18 17:43:22

力扣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/6/13 18:26:06

7.3 模型评估方法论:训练集、验证集、测试集划分策略

7.3 模型评估方法论:训练集、验证集、测试集划分策略 模型评估是机器学习工作流程中的关键环节,其目的是客观、准确地估计一个模型在未知数据上的泛化性能。一个严谨的评估方法论的核心在于数据集的划分策略,其根本目标是模拟模型部署后面对全新数据时的表现,并防止因信息…

作者头像 李华
网站建设 2026/6/16 8:16:34

【毕业设计】SpringBoot+Vue+MySQL 手机销售网站平台源码+数据库+论文+部署文档

摘要 随着移动互联网的普及和电子商务的快速发展,手机销售行业正经历着前所未有的变革。传统的线下销售模式已无法满足消费者对便捷、高效购物体验的需求,线上手机销售平台逐渐成为主流。手机作为现代人生活中不可或缺的智能设备,其市场需求持…

作者头像 李华
网站建设 2026/6/15 21:28:03

LLM - Prompt Engineering 构建工业级 LLM Agent 的六维结构化框架

文章目录Pre引言:从 Chat 到 Engineering一、 Role(角色):不仅是身份,更是领域锚定1.1 明确专业领域 (Domain Specificity)1.2 单一职责原则 (SRP)1.3 避免角色冲突二、 Context(上下文)&#x…

作者头像 李华
网站建设 2026/6/16 18:43:06

【2025最新】基于SpringBoot+Vue的美食信息推荐系统管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展和人们生活水平的不断提高,美食文化逐渐成为人们日常生活中不可或缺的一部分。美食推荐系统应运而生,旨在为用户提供个性化的美食信息推荐,帮助用户更高效地发现符合自身口味和需求的餐饮选择。传统的美食信息…

作者头像 李华