0


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

目录

1 题目

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

样例数据如下 login_log:

在这里插入图片描述

2 建表语句

--建表语句createtableifnotexists login_log
(
    user_id        intcomment'用户id',
    login_time datecomment'登录时间');--数据插入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(partitionby user_id orderby 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(partitionby user_id orderby login_time)as rn
      from 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 diff
      from(select user_id,
                   login_time,
                   row_number()over(partitionby user_id orderby login_time)as rn
            from login_log) t) tt
groupby 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 diff
      from(select user_id,
                   login_time,
                   row_number()over(partitionby user_id orderby login_time)as rn
            from login_log) t) tt
groupby user_id,diff) ttt
groupby user_id ;

执行结果

在这里插入图片描述

标签: sql 数据库 hive

本文转载自: https://blog.csdn.net/hu_wei123/article/details/140504620
版权归原作者 夏木夕 所有, 如有侵权,请联系我们删除。

“SQL面试题练习 —— 查询每个用户最大连续登录天数”的评论:

还没有评论