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

文章目录


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;
相关推荐
大大大大晴天1 天前
Hudi Metadata Table 与 Hive Sync (HMS)怎么选?
大数据
唐青枫2 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
手可摘星辰7772 天前
一次线上FlinkCDC异常排查复盘
大数据·flink
大大大大晴天2 天前
Hudi技术内幕:Metadata Table原理与实践
大数据
大大大大晴天3 天前
Hudi技术内幕:深入解析Index索引机制
大数据
阿里云大数据AI技术3 天前
Flink Forward Asia 2026 深圳启幕:Agentic Streaming for AI,开启实时智能新范式
大数据·flink
SelectDB3 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
掉头发的王富贵4 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
大大大大晴天7 天前
Hudi技术内幕:RecordPayload到RecordMerger
大数据
SelectDB7 天前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生