工作面试、业务时间刷题过程中遇到一些经典问题,聊做记录,权当做温习或者以后自己有机会作为面试er&官使用。不足之处望多多指正
hive经典面试题_用户最大的连续登陆天数
1、用户最大登陆天数问题
题述
- 用户登陆日志数据格式
字段名 | 描述 |
---|---|
user_id | 用户id |
log_date | 登陆日期 |
- 问题:
求表中用户各自连续的最长时间
题解
- 思路
首先利用窗口对用户的登陆时间做排序操作,再通过date_sub做序差从而得到用户判断连续登陆的字段row_date,最后通过row_date聚合统计到其中最大的数值即为用户最大的连续登陆天数; - 知识点:窗口函数、日期函数
- 代码
-- 用户连续登陆最大天数
-- log_date user_id
-- 登陆日志表 a
select user_id
,max(day_num) as max_day_num
from (
select user_id
,data_sub(log_date,cast(row_number_log,int)) as row_date
,count(1) as day_num
from (
select log_date
,user_id
,row_number()over(patition by user_id order by log_date) as row_number_log
from a
) b
group by user_id
,data_sub(log_date,cast(row_number_log,int))
) c