当前位置: 首页 > news >正文

【Hive 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 的分组,最大值与最小值日期统计。

需求实现

selectuser_id,min(order_date) order_start_date,max(order_date) order_end_date
from(selectuser_id,order_date,date_sub(order_date,rn) same_dayfrom(selectuser_id,order_date,row_number() over (partition by user_id order by order_date) rnfromtestgroup byuser_id,order_date )t1 -- 分组后进行行号标记)t2 -- 使用日期和行号进行运算
group byuser_id,same_day
havingcount(user_id) >= 2;

输出结果

在这里插入图片描述

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

date		rn
2023-05-04 	1
2023-05-05 	2
2023-05-06 	3

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

http://www.lryc.cn/news/156913.html

相关文章:

  • RabbitMQ 镜像集群部署
  • SpringMVC框架学习
  • 多通道振弦数据记录仪应用桥梁安全监测的解决方案
  • RDMA 相关bug记录
  • TDengine函数大全-时序库特有函数
  • vue-cli3项目本地启用https,并用mkcert生成证书
  • 包装类笔记
  • TC和TG油封有什么区别?
  • 大数据之MapReduce
  • 《机器人学一(Robotics(1))》_台大林沛群 第 5 周【机械手臂 轨迹规划】 Quiz 5
  • 嵌入式面试/笔试C相关总结
  • 支付宝使用OceanBase的历史库实践分享
  • accelerate 分布式技巧(一)
  • 密码找回安全
  • Spring Boot + Vue的网上商城之商品管理
  • B站:提高你的词汇量:如何用英语谈论驾驶
  • 大前端面试注意要点
  • 稻盛和夫-如是说(读书笔记)
  • Jmeter是用来做什么的?
  • Docker基础教程
  • Linux命令200例:who用于显示当前登录到系统的用户信息
  • HGDB-修改分区表名称及键值
  • 1分钟了解音频、语音数据和自然语言处理的关系
  • 线性代数的学习和整理20,关于向量/矩阵和正交相关,相似矩阵等
  • OpenCV之ellipse函数
  • git快速查看某个文件修改的所有commit
  • 加强版python连接飞书通知——本地电脑PC端通过网页链接打开本地已安装软件(调用注册表形式,以漏洞扫描工具AppScan为例)
  • Jmeter进阶使用指南-使用断言
  • 44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例--网上有些说法好像是错误的
  • 电脑入门: 路由器初学者完全教程