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;