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(数据库)- 获取最近第二次的活动的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 2351. 第一个出现两次的字母

LeetCode 2351. 第一个出现两次的字母

第二次的作业

LeetCode 11月第2周题目汇总

第二次的话

第二次的作业