hive面试题--连续性问题

本文探讨了在面试和工作中如何使用Hive SQL解决连续N天登录或销售额连续破万等连续性问题。文章通过背景介绍,然后详细阐述了两种不同的解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

面试和工作中经常遇到,用sql/hive求出连续N天登录或者连续N天销售额破万的记录等。

数据准备

--新建表与导入数据
use test;
create table if not exists log_info
(uid string,
log_date string)
row format delimited fields terminated by ',';

insert into table log_info values('A','20210901'),
                    ('A','20210902'),('A','20210903')
                    ,('B','20210901'),('B','20210903')
                    ,('v','20210830'),('K','20210902')
                    ,('C','20210903'),('B','20210902')
                    ,('D','20210905');


hive> select * from log_info;
OK
A	20210901
A	20210902
A	20210903
B	20210901
B	20210903
v	20210830
K	20210902
C	20210903
B	20210902
D	20210905

思路一

--先将uid对组内的登录时间升序排名rank1,然后将日期与rank1相减。
--因为这两个标签都是按照时间递增,如果连续的话,值应该是为同一值。

select uid,count(1) as cnt
from 
(select *
    ,row_number()over(partition by uid order by log_date asc) as rank
    ,date_sub(concat_ws('-',substr(log_date,1,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值