news 2026/7/7 7:16:53

力扣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/7/7 8:42:58

Android技术在搜索领域的深度探索与实践:基于字节跳动职位描述的剖析

字节跳动 Android研发工程师—搜索 职位描述 1、和产品、设计团队一起配合,负责抖音搜索的 Android 业务研发; 2、负责设计和打造高扩展性、高效率的搜索客户端框架; 3、打造全感知可兜底的技术体系,保障端侧整体体验和稳定性; 4、参与包括hybrid引擎、前端、客户端、服务…

作者头像 李华
网站建设 2026/7/7 17:14:33

正反向代理:策略

一、防御策略:企业级安全配置实践(一)正向代理防御严格授权控制:配置正向代理(如 Squid)的用户认证(用户名 / 密码、IP 白名单),禁止未授权访问;限制代理服务…

作者头像 李华
网站建设 2026/7/7 11:36:43

Java Web web项目申报系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展,传统的手工申报方式已无法满足现代企事业单位对高效、便捷、透明化管理的需求。项目申报系统作为一种数字化管理工具,能够有效解决申报流程繁琐、信息传递滞后、数据统计困难等问题。本系统基于Java Web技术栈开发&#xff…

作者头像 李华
网站建设 2026/7/7 14:04:42

Swin Transformer整体架构

完美!这张图清楚地展示了Swin Transformer的核心创新。我来详细解释架构和为什么必须交替使用W-MSA和SW-MSA。 一、Swin Transformer整体架构 设计理念 Swin Shifted Window Transformer 核心思想:在局部窗口内计算注意力,而非全局通过窗…

作者头像 李华