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、思路:以第一次的活动为基础来取第二次的,不存在第二次的活动就取第一次的

相关推荐
行走的bug...7 分钟前
利用计算机辅助数学运算
人工智能·算法·机器学习
CoderCodingNo8 分钟前
【GESP】C++五级真题(数论-素数、贪心思想考点) luogu-B4050 [GESP202409 五级] 挑战怪物
开发语言·c++·算法
小O的算法实验室13 分钟前
2026年AEI SCI1区TOP,基于多策略集成粒子群算法+无人机平滑覆盖路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
不一样的故事1261 小时前
高速采集箱
算法·信号处理
会员果汁1 小时前
算法-拓扑排序-C
c语言·开发语言·算法
YGGP1 小时前
【Golang】LeetCode 72. 编辑距离
算法·leetcode
YGGP2 小时前
【Golang】LeetCode 62. 不同路径
算法·leetcode
资生算法程序员_畅想家_剑魔2 小时前
算法-回溯-14
java·开发语言·算法
致Great2 小时前
大模型对齐核心技术:从第一性原理完整推导 PPO 算法!
人工智能·算法·大模型·agent·智能体
_w_z_j_2 小时前
二叉树的右视图(BFS或DFS)
算法·深度优先·宽度优先