牛客登录(二)

题:

牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天,用的是什么设备.

有一个登录(login)记录表,简况如下:


第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网
。。。
第4行表示id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网

还有一个用户(user)表,简况如下:



还有一个客户端(client)表,简况如下:


请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序,上面的例子查询结果如下:

 

查询结果表明:
fh最近的登录日期在2020-10-13,而且是使用pc登录的
wangchao最近的登录日期也是2020-10-13,而且是使用ios登录的

 

 

错误答案:

select u.name as u_n,c.name as c_n,max(l.date)as date from login l
inner join user u on u.id=l.user_id
inner join client c on c.id=l.client_id
group by l.user_id

错误点1:首先用了聚合函数max和group by搭配的时候,select中只能出现条件和结果,例如本题应该只有select max(date) 和group by user_id,最多变成select user_id,max(date) 和group by user_id。

错误点2:只group了userid没有管client,如果当天用户用了多台设备,就会出现很多条数据

 

 

正确答案:

left join user on login.user_id = user.id
left join client on login.client_id = client.id
where (login.user_id,login.date) in
(select user_id,max(date) from login group by user_id)

order by user.name

posted @ 2021-02-17 17:26  小千北同学超爱写代码  阅读(62)  评论(0编辑  收藏  举报