LeetCode(数据库)- 获取最近第二次的活动
Posted 程序员牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(数据库)- 获取最近第二次的活动相关的知识,希望对你有一定的参考价值。
题目链接:点击打开链接
题目大意:略。
解题思路
1、最近第二次:指的是倒数第二大的日期
2、解决方案(1):在一个用户有多个活动的情况下先把最大的日期的给过滤掉,这样只要统一二次筛选最大值即可
3、解决方案(2):通过动态 WHERE 去筛选
AC 代码
-- 解决方案(1)
select u.*
from UserActivity u
where (u.username, u.startDate) in
(
select a.username, max(a.startDate)
from UserActivity a
where (a.username, a.startDate) not in (
select b.username, max(b.startDate)
from UserActivity b
group by b.username
having count(b.username) > 1
)
group by a.username
)
-- 解决方案(2)
WITH t1 AS(SELECT *, ROW_NUMBER() OVER(PARTITION BY username ORDER BY endDate DESC) rw
FROM UserActivity)
SELECT username, activity, startDate, endDate
FROM t1 t1_1
WHERE IF((SELECT rw FROM t1 t1_2 WHERE rw = 2 AND username = t1_1.username) IS NULL, rw = 1, rw = 2)
以上是关于LeetCode(数据库)- 获取最近第二次的活动的主要内容,如果未能解决你的问题,请参考以下文章