当前位置: 首页 > article >正文

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

一、力扣链接

LeetCode_1369

二、题目描述

表: UserActivity

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

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

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

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

三、目标拆解

四、建表语句

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、取最近第二次的活动,没有就取第一天的活动

六、代码实现

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


http://www.kler.cn/a/400285.html

相关文章:

  • 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
  • shell 100例
  • 机器学习(1)
  • 记录配置ubuntu18.04下运行ORBSLAM3的ros接口的过程及执行单目imu模式遇到的问题(详细说明防止忘记)
  • 【Mysql】Mysql函数(上)
  • 6.584-Lab1:MapReduce
  • uniapp Uview上传图片组件Upload会自动刷新
  • mysql的my.cnf配置文件参数说明
  • go语言中的占位符有哪些
  • 性能调优专题(12)之垃圾收集器ParNewCMS与底层三色标记算法详解
  • idea 通过git撤销commit但未push的操作
  • 没钱买KEGG怎么办?REACTOME开源通路更强大
  • 4K双模MiniLED显示器哪个好
  • 大数据平台的网络安全架构
  • 学习笔记024——Ubuntu 安装 Redis遇到相关问题
  • 【网络安全】SSL(二):Keyless SSL技术细节
  • 电子电气架构 --- 车载通信框架和对应技术
  • 使用MaxKB搭建知识库问答系统并接入个人网站(halo)
  • Node.js 和 Express 搭建一个简单的 Web 应用程序
  • 运维面试题.云计算面试题集锦之二
  • List、ArrayList与顺序表1
  • Windows安装vcpkg教程(VS2022)
  • 第二十一章 TCP 客户端 服务器通信 - 客户端OPEN命令
  • Spring Boot汽车资讯:科技与汽车的新篇章
  • Redis中的String数据类型及相关命令
  • 使用 AWR 进行 Exadata 性能诊断