题解 | #牛客每个人最近的登录日期(二)#

牛客每个人最近的登录日期(二)

http://www.nowcoder.com/practice/7cc3c814329546e89e71bb45c805c9ad

注意:select只能包含group by后的项与聚合函数
GROUP BY 与聚合函数 使用注意点 - 初学者心态 - 博客园 https://www.cnblogs.com/jinianjun/archive/2012/06/14/2549735.html
常见错误:把三张表格联接完,group by user.name,然后直接select max(date)
所以可以从in,内连接(学完窗口函数后发现mysql 8.0之后窗口函数更简便)的角度进行解答
1、in
select u.name as u_n,c.name as c_n,l.date from login l
join user u
on l.user_id=u.id
join client c
on l.client_id=c.id
where (l.user_id,l.date) in(select user_id,max(date) from login
group by user_id)
order by u_n

2、内连接
select u.name as u_n, c.name as c_n, l.date
from login as l
join user as u
on l.user_id=u.id
join client as c
on l.client_id=c.id
join (
select user_id, max(date) as date
from login
group by user_id
) a
on l.user_id=a.user_id
and l.date=a.date
order by u.name

3、窗口函数
select u.name as u_n, c.name as c_n, t.d as date
from user u,
client c,
(select * , max(date) over(partition by user_id) as d from login) t
where u.id = t.user_id
and c.id = t.client_id
and t.date = t.d
order by u_n

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务