力扣-2020年最后一次登录

Posted 空空star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣-2020年最后一次登录相关的知识,希望对你有一定的参考价值。

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。

文章目录


前言


一、题目:1890. 2020年最后一次登录

表: Logins

+----------------+----------+
| 列名           | 类型      |
+----------------+----------+
| user_id        | int      |
| time_stamp     | datetime |
+----------------+----------+
(user_id, time_stamp) 是这个表的主键。
每一行包含的信息是user_id 这个用户的登录时间。

编写一个 SQL 查询,该查询可以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。
返回的结果集可以按 任意顺序 排列。
查询结果格式如下例。

输入:
Logins 表:
+---------+---------------------+
| user_id | time_stamp          |
+---------+---------------------+
| 6       | 2020-06-30 15:06:07 |
| 6       | 2021-04-21 14:06:06 |
| 6       | 2019-03-07 00:18:15 |
| 8       | 2020-02-01 05:10:53 |
| 8       | 2020-12-30 00:46:50 |
| 2       | 2020-01-16 02:49:50 |
| 2       | 2019-08-25 07:59:08 |
| 14      | 2019-07-14 09:00:00 |
| 14      | 2021-01-06 11:59:59 |
+---------+---------------------+
输出:
+---------+---------------------+
| user_id | last_stamp          |
+---------+---------------------+
| 6       | 2020-06-30 15:06:07 |
| 8       | 2020-12-30 00:46:50 |
| 2       | 2020-01-16 02:49:50 |
+---------+---------------------+

解释:
6号用户登录了3次,但是在2020年仅有一次,所以结果集应包含此次登录。
8号用户在2020年登录了2次,一次在2月,一次在12月,所以,结果集应该包含12月的这次登录。
2号用户登录了2次,但是在2020年仅有一次,所以结果集应包含此次登录。
14号用户在2020年没有登录,所以结果集不应包含。

二、解题

1.正确示范①

提交SQL

select user_id,max(time_stamp) last_stamp
from Logins 
where year(time_stamp)='2020'
# where substr(time_stamp,1,4)='2020'
group by user_id;

运行结果

2.正确示范②

提交SQL

select user_id,time_stamp last_stamp from(
    select user_id,time_stamp,
    rank() over(partition by user_id order by time_stamp desc) col
    from Logins 
    where year(time_stamp)='2020'
) u
where u.col=1;

运行结果

3.正确示范③

提交SQL

select user_id,time_stamp last_stamp from(
    select user_id,time_stamp,
    dense_rank() over(partition by user_id order by time_stamp desc) col
    from Logins 
    where year(time_stamp)='2020'
) u
where u.col=1;

运行结果

4.正确示范④

提交SQL

select user_id,time_stamp last_stamp from(
    select user_id,time_stamp,
    row_number() over(partition by user_id order by time_stamp desc) col
    from Logins 
    where year(time_stamp)='2020'
) u
where u.col=1;

运行结果

5.其他


总结

正确示范①思路:
通过year(time_stamp)='2020'限定2020年的登录用户,
按照user_id分组group by user_id,取最大time_stampmax(time_stamp)
正确示范②思路:
通过year(time_stamp)='2020'限定2020年的登录用户,
通过rank() over(partition by user_id order by time_stamp desc) col
取排名1;
正确示范③思路:
通过year(time_stamp)='2020'限定2020年的登录用户,
通过dense_rank() over(partition by user_id order by time_stamp desc) col
取排名1;
正确示范④思路:
通过year(time_stamp)='2020'限定2020年的登录用户,
通过row_number() over(partition by user_id order by time_stamp desc) col
取排名1。


LeetCode(数据库)- 2020年最后一次登录

题目链接:点击打开链接

题目大意:略。

解题思路:略。

AC 代码

-- 解决方案(1)
SELECT user_id AS 'user_id',
    MAX(time_stamp) AS 'last_stamp'
FROM Logins
WHERE YEAR(time_stamp) = '2020'
GROUP BY user_id;

-- 解决方案(2)
SELECT user_id, time_stamp last_stamp
FROM (SELECT user_id, time_stamp, RANK() OVER(PARTITION BY user_id ORDER BY time_stamp DESC) rk
FROM Logins
WHERE YEAR(time_stamp) = '2020') t
WHERE rk = 1

以上是关于力扣-2020年最后一次登录的主要内容,如果未能解决你的问题,请参考以下文章

2020年3月底到4月第1周做题记录(力扣)

2020年3月第3周做题记录(力扣)

windows 域控用户记住最后一次登录用户名

关于Linux操作系统使用lastlog命令对OS账号最后一次登录时间的审计

导出OU下的计算机,最后一次登录

首次登录 symfony 应用程序时强制更改密码