文章目录
1、表数据
sql
1 2024-04-25
1 2024-04-26
1 2024-04-27
1 2024-04-28
1 2024-04-30
1 2024-05-01
1 2024-05-02
1 2024-05-04
1 2024-05-05
2 2024-04-25
2 2024-04-28
2 2024-05-02
2 2024-05-03
2 2024-05-04
2、建表和加载数据语句
sql
create table user_log(
id int,
dt string
)
row format delimited
fields terminated by '\t';
load data local inpath '/home/hivedata/user_log.txt' into table user_log;
3、思路
1、判断是否连续登录三天
如何判断:
使用 lead() 函数求出每条三行之后的数据,再求出本条数据日期三天以后的日期(date_add() 函数),这两个值相等的就是连续登录三天
2、拿到满足连续登录三天的最开始的那一天
3、使用笛卡尔积拿到用户连续三天登录的所有数据记录
4、答案
sql
with t as (
select *,lead(dt,2) over (partition by id order by dt) lead_3_days,date_add(dt,2) true_3_days from user_log
),t2 as (
select * from t where lead_3_days = true_3_days
)
select id,date_add(dt,d.list) dt2 from t2,(select explode(array(0,1,2)) list) d;