首页 > 试题广场 >

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

[编程题]牛客每个人最近的登录日期(二)
  • 热度指数:164302 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天,用的是什么设备.
有一个登录(login)记录表,简况如下:
id user_id client_id date
1
2
3
4
2
3
2
3
1
2
2
2
2020-10-12
2020-10-12
2020-10-13
2020-10-13

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

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

id name
1
2
3
tm
fh
wangchao

还有一个客户端(client)表,简况如下:
id name
1 pc
2 ios
3 anroid
4 h5
请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序,上面的例子查询结果如下:
u_n c_n date
fh ios 2020-10-13
wangchao ios 2020-10-13
查询结果表明:
fh最近的登录日期在2020-10-13,而且是使用ios登录的
wangchao最近的登录日期也是2020-10-13,而且是使用ios登录的

示例1

输入

drop table if exists login;
drop table if exists user;
drop table if exists client;
CREATE TABLE `login` (
`id` int(4) NOT NULL,
`user_id` int(4) NOT NULL,
`client_id` int(4) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`));

CREATE TABLE `user` (
`id` int(4) NOT NULL,
`name` varchar(32) NOT NULL,
PRIMARY KEY (`id`));

CREATE TABLE `client` (
`id` int(4) NOT NULL,
`name` varchar(32) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO login VALUES
(1,2,1,'2020-10-12'),
(2,3,2,'2020-10-12'),
(3,2,2,'2020-10-13'),
(4,3,2,'2020-10-13');

INSERT INTO user VALUES
(1,'tm'),
(2,'fh'),
(3,'wangchao');

INSERT INTO client VALUES
(1,'pc'),
(2,'ios'),
(3,'anroid'),
(4,'h5');

输出

fh|ios|2020-10-13
wangchao|ios|2020-10-13
头像 SunburstRun
发表于 2020-08-17 17:56:21
先根据用户分组,查出每个用户登录的最新日期(一): select user_id,max(date) from login group by login.user_id ; 查找出来的应该这样的 展开全文
头像 skcmc
发表于 2021-05-08 09:46:30
select user.name, client.name, d datefrom user, client, (select *, max(date) over(partition by user_id) d from login) twhere user.id = t.user_ 展开全文
头像 高质量搬砖人
发表于 2021-02-01 10:30:29
方法)WHERE子句筛选最晚日期 查询结果按照user的name升序排序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.clien 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-30 14:18:28
题目描述:sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序。考点:group by 子句常见错误:select 子句中只能存在以下三种元素:常数、聚合函数、group by子句指定列(聚合键)所以下面这么写法错误: select 展开全文
头像 一直上上签X
发表于 2021-07-22 14:33:12
首先明确出要查询的目标: 用户名, ---> 来自于用户表 客户端名, ---> 来自于客户端表 date ---> 来自于login表 然后目标明确,进行三表聚合:SELECT u.name as u_n, c.name as 展开全文
头像 great、DY
发表于 2021-10-14 15:25:46
1 用开窗函数在各分组内以日期降序排名, 2 连接用户表和设备表, 3 where筛选第1步中排名为1的行,就是各分组中日期最晚的行数据 select user.name u_n,client.name c_n,t.date from (select user_id,client_id,date, 展开全文
头像 109号
发表于 2020-12-03 16:51:11
这里关键是要筛选出来最近登陆的日期,再去和user、client两个表联结,最近登陆的条件需要特别注意,可以使用(user_id,date)in的方法,也可以使用联结,在联结时需要使用两个条件,即login.date=a.mdate和login.user_id=a.user_id SELECT us 展开全文
头像 幻想家刘同学
发表于 2021-12-31 11:56:05
# 方法1:根据每个用户的先后登录时间进行排名,时间最晚的排名第1,统计出所有用户排名第1的记录-- 窗口函数 # with t as ( # SELECT u.name u_n,c.name c_n,date # ,dense_rank()over(partition by l.user_ 展开全文
头像 Half-
发表于 2021-07-23 14:30:30
思路:以login为主表连接,找出每个用户的日期排名,从表中筛选rk=1的selectu_n,c_n,datefrom( select u.name u_n ,c.name c_n ,date ,row_number()over(partition by u.name 展开全文
头像 qstalking
发表于 2021-01-25 23:16:26
#不同日期会对应不同的设备。 #本题中用户ID和日期可以确定唯一记录,所以多表关联+where过滤(用户ID,日期) select u.name as u_n         ,c. 展开全文