【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;
相关推荐
samFuB2 分钟前
安慰剂检验Stata代码(全套代码、示例数据及参考文献)
大数据
白总Server22 分钟前
UI架构解说
大数据·服务器·网络·数据库·web安全·架构·数据库架构
有限无限资料库2 小时前
制造企业数字化中台(技术中台、数据中台、业务中台)建设方案
大数据·人工智能·制造
打码人的日常分享2 小时前
智慧化工园区解决方案,数字化转型助力化工园区升级(PPT)
大数据·数据库·web安全·系统安全·规格说明书
宝哥大数据2 小时前
Flink Job更新和恢复
大数据·flink
Mephisto.java3 小时前
【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩
大数据·sql·mysql·json·hbase·database
不二人生3 小时前
SQL面试题——飞猪SQL面试 重点用户
数据库·sql·面试
IPdodo全球网络4 小时前
如何解决亚马逊商家IP问题:静态住宅IP的优势与选择指南
大数据·运维·网络
一只专注api接口开发的技术猿4 小时前
python 京东api怎么写
大数据·开发语言·数据库·python