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

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

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

先根据用户分组,查出每个用户登录的最新日期(一):
select user_id,max(date) from login group by login.user_id ;
查找出来的应该这样的


然后查找出所有用户的名字,所有的登录设备,所有的登录日期(二):
select user.name as u_n, client.name as c_n,
login.date
from login 
join user on login.user_id=user.id
join client on login.client_id=client.id
查找的结果应该是:
那么再根据用户id和最新的登录日期(一),可以在所有的数据(二)里面,从而确定唯一一组数据,最后再按照名字排序(三):
select user.name as u_n, client.name as c_n,
login.date
from login 
join user on login.user_id=user.id
join client on login.client_id=client.id
where (login.user_id,login.date) in
(select user_id,max(date) from login group by login.user_id )
order by user.name;



全部评论
除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出
1 回复 分享
发布于 2020-09-05 15:43
这位亲人给出的最终结果输出是错误的,主要是因为使用聚合函数group by和max()函数筛选出的user_id,client_id,max(date)中的client_id有误造成的
5 回复 分享
发布于 2021-06-24 17:31
with t1 as(select user_id,client_id,max(date) date from login group by user_id) select user.name u_n,client.name c_n,t1.date date from t1 left join user on t1.user_id=user.id left join client on t1.client_id=client.id order by user.name 请问我这样写为什么不对啊
点赞 回复 分享
发布于 2022-04-10 11:25
同一用户 同一天 用了两个不同的设备登录请问怎么办?
2 回复 分享
发布于 2022-03-25 15:19
select u.name as u_n,c.name as c_n,l1.date as d from login as l1 inner join (select l2.user_id,max(l2.date) from login as l2 group by l2.user_id) as l3 on l1.user_id=l3.user_id inner join user as u on u.id=l1.user_id inner join client as c on c.id=l1.client_id order by u.name; 请教下大家帮忙看下问什么通不过,不明白为什么没有通过,
1 回复 分享
发布于 2020-10-10 17:11
还得是佬,讲的太通俗易懂了。 首先把三张表连接起来获得题目那个表格不难,可以先写出这个语句。 题目还要求最新的日期,随意在日期选择上面有稍微加点条件。 用户id和对应的日期要是最新的,这里在login那张表再做一次查询,最后选出来即可。
点赞 回复 分享
发布于 2024-10-20 10:52 广东
这个没问题啊,评论怎么都看不出来吗
点赞 回复 分享
发布于 2024-04-23 23:34 北京
干脆自己造两个表 select a.uname u_n,a.cname c_n,a.date from (select u.name as uname,c.name as cname,max(l.date) as date from login l join user u on l.user_id=u.id join client c on l.client_id=c.id group by u.name,c.name order by u.name) as a join (select u.name as uname,max(l.date) as date from login l join user u on l.user_id=u.id group by u.name ) as b on a.uname =b.uname and a.date=b.date
点赞 回复 分享
发布于 2022-07-01 22:46
这个解题思路忽略了一个基本的实时,fh这个客户的不同的日期用的客户端是不一样的,是无法聚合的。客户端一个是pc,一个是iOS
点赞 回复 分享
发布于 2022-04-27 01:00
棒,思路清晰。看一遍就懂了,感谢大佬
点赞 回复 分享
发布于 2021-07-26 23:05
SELECT u.name, c.name, l.date FROM user u INNER JOIN login l ON u.id = l.user_id LEFT JOIN client c ON c.id = l.client_id WHERE l.date = (SELECT MAX(date) AS d FROM login l1 WHERE l.user_id = l1.user_id) GROUP BY l.user_id ORDER BY u.name 请问下我这样查行吗。因为我看前面好多题解1楼都是这样的关联子查询
点赞 回复 分享
发布于 2021-07-21 15:19

相关推荐

菜菜狗🐶:双非之光
找工作,你会甘心进小厂还...
点赞 评论 收藏
分享
评论
82
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务