SQL,力扣题目1369,获取最近第二次的活动

一、力扣链接

LeetCode_1369

二、题目描述

表: UserActivity

复制代码
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| username      | varchar |
| activity      | varchar |
| startDate     | Date    |
| endDate       | Date    |
+---------------+---------+
该表可能有重复的行
该表包含每个用户在一段时间内进行的活动的信息
名为 username 的用户在 startDate 到 endDate 日内有一次活动

编写解决方案展示每一位用户 最近第二次 的活动

如果用户仅有一次活动,返回该活动

一个用户不能同时进行超过一项活动,以任意顺序返回结果

三、目标拆解

四、建表语句

sql 复制代码
Create table If Not Exists UserActivity (username varchar(30), activity varchar(30), startDate date, endDate date)
Truncate table UserActivity
insert into UserActivity (username, activity, startDate, endDate) values ('Alice', 'Travel', '2020-02-12', '2020-02-20')
insert into UserActivity (username, activity, startDate, endDate) values ('Alice', 'Dancing', '2020-02-21', '2020-02-23')
insert into UserActivity (username, activity, startDate, endDate) values ('Alice', 'Travel', '2020-02-24', '2020-02-28')
insert into UserActivity (username, activity, startDate, endDate) values ('Bob', 'Travel', '2020-02-11', '2020-02-18')

五、过程分析

1、按用户分组,起始日期倒序排名

2、进行左连接

3、取最近第二次的活动,没有就取第一天的活动

六、代码实现

sql 复制代码
with t1 as(
select username, activity, startDate, endDate,
       row_number() over(partition by username order by startDate desc) rn
from UserActivity
)
select a.username, ifnull(b.activity, a.activity) activity, ifnull(b.startDate, a.startDate) startDate, ifnull(b.endDate, a.endDate) endDate
from(
select * from t1 where rn = 1) a
left join(
select * from t1 where rn = 2) b 
on b.username = a.username;

七、结果验证

八、小结

1、CTE表达式 + 排名函数 + left join

2、思路:以第一次的活动为基础来取第二次的,不存在第二次的活动就取第一次的

相关推荐
聚客AI7 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v9 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工11 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农13 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了13 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo14 小时前
322:零钱兑换(三种方法)
算法
NAGNIP1 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队1 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法