【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;
相关推荐
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
极客数模6 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
亓才孓7 小时前
[数据库]应该注意的细节
数据库·sql
编程彩机8 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构
vx-bot5556669 小时前
企业微信接口在多租户SaaS平台中的集成架构与数据隔离实践
大数据·架构·企业微信
bubuly11 小时前
软件开发全流程注意事项:从需求到运维的全方位指南
大数据·运维·数据库
我真的是大笨蛋12 小时前
Redo Log详解
java·数据库·sql·mysql·性能优化
xixixi7777713 小时前
基于零信任架构的通信
大数据·人工智能·架构·零信任·通信·个人隐私
Hello.Reader13 小时前
Flink 自适应批执行(Adaptive Batch Execution)让 Batch 作业“边跑边优化”
大数据·flink·batch