首页 > 试题广场 >

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

[编程题]牛客每个人最近的登录日期(一)
  • 热度指数:113857 时间限制: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的设备登录了牛客网


请你写出一个sql语句查询每个用户最近一天登录的日子,并且按照user_id升序排序,上面的例子查询结果如下:
user_id date
2
3
2020-10-13
2020-10-13
查询结果表明:
user_id为2的最近的登录日期在2020-10-13
user_id为3的最近的登录日期也是2020-10-13
示例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');

输出

2|2020-10-13
3|2020-10-13
用一下first_value窗口函数的用法:
select distinct user_id,FIRST_VALUE(date) over(partition by user_id order by date desc) as d from login


发表于 2021-07-13 17:03:33 回复(3)
先按照user_id分组,并选出每个组最大的date的情况。 后面再排序

select max(date)  as d from login 
  group by user_id
order by user_id;
发表于 2020-08-17 22:05:56 回复(3)
不需要显示user_id就离谱
发表于 2020-10-12 16:53:35 回复(6)
select  user_id,max(date) d from login
group by user_id order by user_id ASC;

发表于 2021-07-19 11:11:52 回复(0)
考点:聚合函数
使用max() 函数来取得最近的登录时间
select user_id, max(date)
from login
group by user_id
order by user_id


发表于 2021-03-28 11:01:12 回复(0)
select user_id,date AS d
from login a
where date = ( select date
              from login b
              where a.user_id = b.user_id
              ORDER BY date DESC LIMIT 1
)
order by user_id asc;

用关联子查询就可以啦。
发表于 2021-06-01 12:16:52 回复(0)

这是对的,

SELECT MAX(date) AS d 
FROM login
GROUP BY user_id;

改成这样就不对了,

SELECT date AS d 
FROM login
GROUP BY user_id
ORDER BY date DESC LIMIT 1;

为啥呢?

发表于 2020-09-13 15:11:48 回复(7)
select max(date) from login
group by user_id
发表于 2020-08-18 10:02:33 回复(0)
# 分组,max求最大日期,再排序
select user_id, max(date) as date
from login
group by user_id
order by user_id
发表于 2022-04-18 13:50:24 回复(0)
原理:分组找最大值😋
SELECT 
  user_id,
  MAX(DATE) as d 
FROM
  login 
GROUP BY user_id 
ORDER BY user_id ;
发表于 2020-11-02 17:17:43 回复(3)
SELECT MAX(date) FROM login
GROUP BY user_id
ORDER BY user_id

发表于 2020-09-06 15:57:08 回复(0)
select user_id,max(date) from login 
group by user_id
order by user_id


发表于 2025-08-22 14:35:27 回复(0)
select max(date) as d
from login
group by user_id
order by user_id;

发表于 2020-09-24 15:42:38 回复(1)
select user_id,max(date) as date
from login
group by 1
order by 1

发表于 2025-10-15 18:07:15 回复(0)
select user_id,
date
from (
    select user_id,
    date,
    row_number() over(partition by user_id order by date desc) as rk
    from login
) t
where t.rk=1
order by user_id;

发表于 2025-08-17 13:17:40 回复(0)
select
    user_id,
    max(date) as date
from
    login
group by
    user_id
order by
    user_id

发表于 2025-08-07 14:06:35 回复(0)
select
    l2.user_id,
    l2.date
from login l2
where l2.date in (
    select max(date)  from login l1
    group by l1.user_id
    having l2.user_id = l1.user_id
)
order by user_id;
发表于 2025-07-15 11:50:03 回复(0)
select user_id,max(date) as d
from login
group by user_id
order by user_id asc

发表于 2025-06-28 20:57:19 回复(0)
select
    user_id
    , date
from
    (select
        user_id
        , date
        , rank()over(partition by user_id order by date desc) as rk
    from
        login
    order by
        user_id
    ) as t1
where
    rk = 1

发表于 2025-06-02 16:21:26 回复(0)
请问下我这个为什么不对呀

select  distinct user_id, date 
from  
(select a.user_id,b.date from login a
left join login b on a.user_id=b.user_id 
and a.date<=b.date
) t1
发表于 2025-06-02 15:04:14 回复(0)

问题信息

SQL
难度:
202条回答 4908浏览

热门推荐

通过挑战的用户

查看代码
牛客每个人最近的登录日期(一)