LeetCode:Database 89.获取最近第二次的活动
Posted Xiao Miao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:Database 89.获取最近第二次的活动相关的知识,希望对你有一定的参考价值。
要求:写一条SQL查询展示每一位用户最近第二次的活动
如果用户仅有一次活动,返回该活动,一个用户不能同时进行超过一项活动,以 任意 顺序返回结果
表: UserActivity的结构
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| username | varchar |
| activity | varchar |
| startDate | Date |
| endDate | Date |
+---------------+---------+
该表不包含主键
该表包含每个用户在一段时间内进行的活动的信息
名为 username 的用户在 startDate 到 endDate 日内有一次活动
UserActivity 表:
+------------+--------------+-------------+-------------+
| username | activity | startDate | endDate |
+------------+--------------+-------------+-------------+
| Alice | Travel | 2020-02-12 | 2020-02-20 |
| Alice | Dancing | 2020-02-21 | 2020-02-23 |
| Alice | Travel | 2020-02-24 | 2020-02-28 |
| Bob | Travel | 2020-02-11 | 2020-02-18 |
+------------+--------------+-------------+-------------+
Result TAble:
+------------+--------------+-------------+-------------+
| username | activity | startDate | endDate |
+------------+--------------+-------------+-------------+
| Alice | Dancing | 2020-02-21 | 2020-02-23 |
| Bob | Travel | 2020-02-11 | 2020-02-18 |
+------------+--------------+-------------+-------------+
Alice 最近一次的活动是从 2020-02-24 到 2020-02-28 的旅行, 在此之前的 2020-02-21 到 2020-02-23 她进行了舞蹈
Bob 只有一条记录,我们就取这条记录
SQL语句:
select username,activity,startDate,endDate from (
select username,activity,startDate,endDate,row_number() over(partition by username order by startDate desc) as r,count(*) over(partition by username) as c1
from UserActivity)a
where if(c1>1,r=2,r=1);
以上是关于LeetCode:Database 89.获取最近第二次的活动的主要内容,如果未能解决你的问题,请参考以下文章