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

相关推荐
不会c嘎嘎5 分钟前
算法百练 ,直击OFFER -- DAY7
算法
浅川.2513 分钟前
xtuoj 不定方程的正整数解
算法
dog25016 分钟前
让算法去学习,而不是去启发
学习·算法
草莓熊Lotso23 分钟前
《算法闯关指南:动态规划算法--斐波拉契数列模型》--04.解码方法
c++·人工智能·算法·动态规划
alphaTao24 分钟前
LeetCode 每日一题 2025/12/1-2025/12/7
数据库·算法·leetcode
苏小瀚26 分钟前
[算法]---分治-快排和归并
java·算法·leetcode
Jac_kie_層樓26 分钟前
力扣hot100刷题记录(12.1)
算法·leetcode·职场和发展
无限进步_29 分钟前
寻找数组中缺失数字:多种算法详解与比较
c语言·开发语言·数据结构·算法·排序算法·visual studio
多恩Stone34 分钟前
【3DV 进阶-9】Hunyuan3D2.1 中的 MoE
人工智能·pytorch·python·算法·aigc
xu_yule36 分钟前
数据结构(4)链表概念+单链表实现
数据结构·算法·链表