欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > SQL面试题练习 —— 查询每个用户最大连续登录天数

SQL面试题练习 —— 查询每个用户最大连续登录天数

2024/10/24 5:21:04 来源:https://blog.csdn.net/hu_wei123/article/details/140504620  浏览:    关键词:SQL面试题练习 —— 查询每个用户最大连续登录天数

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

1 题目


查询每个用户最大连续登录天数

样例数据如下 login_log:

在这里插入图片描述

2 建表语句


--建表语句
create table if not exists login_log
(user_id        int comment '用户id',login_time date comment '登录时间'
);
--数据插入
INSERT overwrite table login_log
VALUES (1, '2022-11-28'),(1, '2022-12-01'),(1, '2022-12-02'),(1, '2022-12-03'),(2, '2022-12-01'),(2, '2022-12-04');

3 题解


(1)开窗,排序

select user_id,login_time,row_number() over (partition by user_id order by login_time) rn
from login_log;

执行结果

在这里插入图片描述

(2)利用等差数列的特性,如果是连续登录,login_time - num 则相等。

select user_id,login_time,-- 在Hive中,DATE_SUB函数只能以天为单位进行操作。DATE_SUB用于从指定日期减去指定天数。date_sub(login_time, rn) as diff
from (select user_id,login_time,row_number() over (partition by user_id order by login_time) as rnfrom login_log) t

在这里插入图片描述

(3)按照 diff 分组,获取每个用户每次连续登录的天数

select user_id,diff,count(*) days
from (select user_id,login_time,-- 在Hive中,DATE_SUB函数只能以天为单位进行操作。DATE_SUB用于从指定日期减去指定天数。date_sub(login_time, rn) as difffrom (select user_id,login_time,row_number() over (partition by user_id order by login_time) as rnfrom login_log) t) tt
group by user_id,diff;

执行结果

在这里插入图片描述

(4)得出每个用户最大连续登录天数

select user_id,max(days) as max_days
from
(select user_id,diff,count(*) days
from (select user_id,login_time,-- 在Hive中,DATE_SUB函数只能以天为单位进行操作。DATE_SUB用于从指定日期减去指定天数。date_sub(login_time, rn) as difffrom (select user_id,login_time,row_number() over (partition by user_id order by login_time) as rnfrom login_log) t) tt
group by user_id,diff) ttt
group by user_id ;

执行结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com