0
点赞
收藏
分享

微信扫一扫

【Hive sql 面试题】现有用户登录记录表,请查询出用户连续三天登录的所有数据记录(难)

ixiaoyang8 2024-11-12 阅读 6

文章目录


1、表数据

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、建表和加载数据语句

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、答案

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;

在这里插入图片描述

举报

相关推荐

0 条评论