【Hive SQL 每日一题】统计用户连续下单的日期区间

文章目录

测试数据

sql 复制代码
create table test(user_id string,order_date string);

INSERT INTO test(user_id, order_date) VALUES('101', '2021-09-21'),('101', '2021-09-22'),('101', '2021-09-23'),('101', '2021-09-27'),('101', '2021-09-28'),('101', '2021-09-29'),('101', '2021-09-30'),('102', '2021-10-01'),('102', '2021-10-02'),('102', '2021-10-05'),('102', '2021-10-06'),('102', '2021-10-07'),('106', '2021-10-04'),('106', '2021-10-05'),('106', '2021-10-08'),('107', '2021-10-05'),('107', '2021-10-06');

需求说明

统计用户连续下单的日期区间,所以连续的下单日期必须 >= 2,例如:2023-01-01,2023-01-02

分析步骤如下:

  1. user_idorder_date 进行分组,同天的下单日期只保留一条。

  2. 使用 row_number 窗口函数对行号进行标记。

  3. 使用 date_sub 函数与行号标记进行运算,如果数据连续的话,那么运算后的日期必然是一样的。

  4. user_iddate_sub 运算后日期进行分组,过滤数量 < 2 的分组,最大值与最小值日期统计。

需求实现

sql 复制代码
select
    user_id,
    min(order_date) order_start_date,
    max(order_date) order_end_date
from
    (select
        user_id,
        order_date,
        date_sub(order_date,rn) same_day
    from
        (select
            user_id,
            order_date,
            row_number() over (partition by user_id order by order_date) rn
        from
            test
        group by
            user_id,
            order_date )t1 -- 分组后进行行号标记
       )t2 -- 使用日期和行号进行运算
group by
    user_id,same_day
having
    count(user_id) >= 2;

输出结果

解决这题的关键是使用 row_number 窗口函数进行行号标记,然后和 date_sub 进行运算,如果日期是连续的,那么运算结果得到的日期就是一致的,如下所示:

sql 复制代码
date		rn
2023-05-04 	1
2023-05-05 	2
2023-05-06 	3

运算后,日期结果都为 2023-05-03,显然该日期是连续的,利用这一特性完成该需求。

相关推荐
xcLeigh9 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
云上先途9 小时前
属性标注是什么?主要解决什么问题?
大数据·人工智能
大大大大晴天12 小时前
每天认识一个组件:元数据平台OpenMetadata
大数据
接口不宕机12 小时前
1688 商品列表 API 对接商家 ERP,实现店铺商品同步与上下架自动监控
大数据
学代码的CJY14 小时前
CJY 知识工作台:博客写作使用指南
数据仓库·知识图谱
2601_9626802214 小时前
数据分析面试常考的SQL题和业务题分别是哪几类?
sql·面试·数据分析
河南花仙子科技14 小时前
企业定制小游戏助力品牌软性传播
大数据·科技·游戏·小程序
云上先途14 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
yt004yt15 小时前
### 越华环保集团|绿岛 VOCs 集中治理,管网系统安全设计工程实战分享
大数据·运维
GreatVicent15 小时前
腾讯AI产业大会解读:Agent进场,企业基础设施怎么搭
大数据·数据库·人工智能·llm·agent·企业信息化