Hive 刷题——查询每个用户登录日期的最大空档期

需求描述

从登录明细表(user_login_detail)中查询每个用户两个登录日期(以login_ts为准)之间的最大的空档期。统计最大空档期时,用户最后一次登录至今的空档也要考虑在内,假设今天为2021-10-10。
期望结果如下:
user_id
 
(用户id)
max_diff
 
(最大空档期)
101
10
102
9
103
10
104
9
105
6
106
5
107
10
108
4
109
10
1010
12
需要用到的表:
用户登录明细表:user_login_detail
user_id(用户id)
ip_address(ip地址)
login_ts(登录时间)
logout_ts(登出时间)
101
180.149.130.161
2021-09-21 08:00:00
2021-09-27 08:30:00
102
120.245.11.2
2021-09-22 09:00:00
2021-09-27 09:30:00
103
27.184.97.3
2021-09-23 10:00:00
2021-09-27 10:30:00

参考sql

select user_id, max(datediff(next_login_date, login_date)) max_diff
from (select user_id,
             login_date,
             lead(login_date, 1, date('2021-10-10')) over (partition by user_id order by login_date) next_login_date
      from (select user_id, date(login_ts) login_date
            from user_login_detail
            group by user_id, date(login_ts)) t) t
group by user_id;
posted @ 2023-02-01 11:16  晓枫的春天  阅读(54)  评论(0编辑  收藏  举报