首页 > 试题广场 >

最长连续登录天数

[编程题]最长连续登录天数
  • 热度指数:88519 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
你正在搭建一个用户活跃度的画像,其中一个与活跃度相关的特征是“最长连续登录天数”, 请用SQL实现“2023年1月1日-2023年1月31日用户最长的连续登录天数”
登陆表 tb_dau:
fdate user_id
2023-01-01 10000
2023-01-02 10000
2023-01-04 10000
输出:
user_id max_consec_days
10000 2
示例1

输入

drop table if exists tb_dau;
create table `tb_dau` (
    `fdate` date,
    `user_id` int
);
insert into tb_dau(fdate, user_id)
values 
('2023-01-01', 10000),
('2023-01-02', 10000),
('2023-01-04', 10000);

输出

user_id|max_consec_days
10000|2

说明

id为10000的用户在1月1日及1月2日连续登录2日,1月4日登录1日,故最长连续登录天数为2日

备注:
MySQL中日期加减的函数
日期增加 DATE_ADD,例:date_add('2023-01-01', interval 1 day) 输出 '2023-01-02'
日期减少 DATE_SUB,例:date_sub('2023-01-01', interval 1 day) 输出 '2022-12-31'
日期差 DATEDIFF,例:datediff('2023-02-01', '2023-01-01') 输出31
头像 牛客题解官
发表于 2025-02-18 10:12:44
精华题解 这道题目要求我们计算2023年1月1日至2023年1月31日期间,每个用户的最长连续登录天数。下面是这个SQL查询的思路和实现步骤。 1. 确定总体问题 我们需要计算每个用户在给定日期范围内的最长连续登录天数。连续登录天数的计算需要识别出连续的日期序列。 2. 分析关键问题 排序和编号:首先,我们 展开全文
头像 zzzzzzy6_
发表于 2024-08-12 11:15:24
select user_id, max(连续登录天数) as max_consec_days from (select user_id, max(日期排序)-min(日期排序)+1 as 连续登录天数 from (select user_id, fd 展开全文
头像 美丽的回笼觉觉主在刷代码
发表于 2024-08-19 11:10:21
主要思路:利用ROW_NUMBER 对每个user_id登录时长进行升序排序,得到date_order列;利用DATE_SUB 将fdate与date_order相减,得到“伪日期列-date2,若连续登录,date2应相同;COUNT计算连续登陆时长 取 MAX。 SELECT DISTINCT 展开全文
头像 七念叶
发表于 2024-08-26 11:14:18
select user_id,max(consec_days) as max_consec_days from (select b.user_id, b.first_date, count(b.first_date) as consec_days fro 展开全文
头像 NOX_0611
发表于 2024-08-09 01:26:08
WITH t AS( SELECT fdate, user_id, DENSE_RANK() over (PARTITION BY user_id ORDER BY fdate) AS rk FROM tb_dau WHERE YEAR(fdate) = 展开全文
头像 牛客698492869号
发表于 2024-08-19 21:50:56
WITH login_gaps AS ( -- 获取上一行数据日期 SELECT user_id, fdate, LAG(fdate) OVER (PARTITION BY user_id ORDER BY fdate) AS previou 展开全文
头像 加麻加辣的番石榴很emo
发表于 2024-11-30 17:44:04
select user_id, max(num) as max_consec_days from ( select user_id, ori_date, count(distinct fdate) as num from ( select user_id, fdate 展开全文
头像 牛客283607898号
发表于 2025-02-19 19:42:39
select user_id, max(days) as max_consec_days from( select user_id, datediff(max(fdate),min(fdate))+1 as days from ( select user_id 展开全文
头像 牛客851291063号
发表于 2024-08-13 13:23:14
select cur_id user_id,format(max(cnt)+1,0) max_consec_days from( select if(@cur,@per:=@cur,@per:=null) per, @cur:=fdate cur, 展开全文
头像 小艺找到好工作啦
发表于 2025-11-25 13:13:46
select user_id, max(连续登录天数) as max_consec_days from (select user_id,初始日期,max(日期排序)-min(日期排序)+1 as 连续登录天数 from (select user_id, f 展开全文
头像 Vangen_Data_Analytics
发表于 2025-09-22 19:41:15
WITH t0 AS ( SELECT fdate, row_number() over ( PARTITION BY user_id ORDER BY fdate ) AS dt, user_id FROM tb_dau GROUP BY 1, 3 ), t1 AS ( SELECT fdate, 展开全文