前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
1890.2020年最后一次登录
表:Logins
列名 | 类型 |
---|---|
user_id | int |
time_stamp | varchar |
(user_id, time_stamp) 是这个表的主键(具有唯一值的列的组合)。每一行包含的信息是user_id 这个用户的登录时间。
编写解决方案以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。
返回的结果集可以按 任意顺序 排列。
我那不值一提的想法:
- 首先梳理表内容,题干一共给了一张登录表,记录了用户id和时间戳
- 其次分析需求,题目要求获取在2020登录过的所有用户的本年度最后一次登录时间,但是不包括2020没有登录过的用户。
- 对于2020这时间节点来说,我们可以使用字符提取,
substr(time_stamp,4) = 2020
- 对于最晚登录的用户,可以使用
max
函数 - 对于没有登录过的用户,可以限制条件
count(time_stamp) >= 1
select user_id,max(time_stamp) as last_stamp
from Logins
where substr(time_stamp,1,4) = 2020
group by user_id
having count(time_stamp) >= 1
除了我写的方法以外,还有另外的方法来表示2020
- year
where year(timestamp) = "2020"
- like
where timestamp like "2020%"
结果:
总结:
能运行就行。