【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;
相关推荐
金融小师妹几秒前
AI量化视角:美11月CPI数据冲击下的美联储降息预期鸽派与资产定价重构
大数据·人工智能·深度学习
Elastic 中国社区官方博客10 分钟前
Kibana 数据可视化的新配色方案 —— 我们如何以及为什么创建它
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·kibana
福客AI智能客服34 分钟前
智能客服机器人:家居建材电商的场景化服务核心
大数据·人工智能·机器人
Hello.Reader39 分钟前
Flink SQL 的 SET 语句会话参数配置与快速自检(SQL CLI 实战)
数据库·sql·flink
TG:@yunlaoda360 云老大1 小时前
如何评估华为云国际站代理商跨境合规要求?
大数据·数据库·华为云·云计算
CHrisFC1 小时前
汽车零配件检测实验室LIMS系统应用实践
大数据·人工智能·汽车
TG:@yunlaoda360 云老大1 小时前
如何了解华为云国际站代理商的GACS主要有什么作用呢?
大数据·华为云·云计算
CES_Asia1 小时前
立即行动,锁定2026增长引擎:报名CES Asia机器人展,同步押注“具身智能”与亚洲市场
大数据·人工智能·百度·机器人
-大头.1 小时前
SQL性能优化与索引策略实战
数据库·sql·性能优化
青软青之LIMS1 小时前
破孤岛 统全局 智未来:King‘s LIMS集团版引领实验室数智化协同新生态
大数据·实验室信息管理系统·实验室数智化管理系统·实验室数字化管理系统·实验室综合管理平台