MaxCompute 使用SQL进行重叠交叉区间问题分析

简介: 使用Maxcomputer内置SQL函数进行重叠交叉区间需求分析

日常需求中经常会会遇到重叠交叉区间统计的需求,比如电商场景中某个品牌的打折活动,第一次活动活动时间为2021-08-01到 2021-08-09,第二次活动时间为 2021-08-05到 2021-08-15其中5号到9号为重复天数,这些天只统计一次,即该品牌打折活动共计15天。

    接下来以某公司的需求的简化版为例进行需求分析

需求:每日服务器的在线人数(享受服务的人数)

order_id(单号)

stime(服务器开始日期)

etime(服务器结束日期)

X01

2021-05-01

2021-06-02

X02

2021-05-28

2021-06-01

X03

2021-06-13

2021-07-13

...

...

...

汇总成如下表:

date(日期)

count(人数)

2021-01-01

45

2021-01-02

90

...

...

分析:对每个单号的开始时间和结束日期进行展开,然后对日期去重

  1. 生成一系列数据,并计算每个单号的日期差
with tb1 as(select        order_id,        stime,        etime,        datediff(etime,stime) diff
fromvalues('X01','2021-05-01','2021-06-02'),('X02','2021-05-28','2021-06-01'),('X03','2021-06-13','2021-07-13')               t(order_id,stime,etime))
  1. 使用repeat或者rpad函数对每个单号的开始时间进行增值
--eg:--返回ababab select repeat('ab',3);--返回abcde12121select rpad('abcde',10,'12');
tb2 as(select        order_id,        stime,        etime,        diff,        substr(repeat(stime||',',diff),1,11*diff-1) re_t
from tb1
)
  1. 使用posexplode()方法生成序列
tb3 as(select        order_id,        stime,        etime,        diff,        re_time,        inx,        start_time
from tb2 lateral view posexplode(split(re_time,",")) t as inx,start_time
)--展示数据如下order_id  stime etime diff  re_time inx start_time
X01 2021-05-012021-06-02322021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-0102021-05-01X01 2021-05-012021-06-02322021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-0112021-05-01X01 2021-05-012021-06-02322021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-01,2021-05-0122021-05-01.....
  1. 使用date_add将生成的序列与每个单号的初始时间相加,得到每个单号的在线时间
tb4 as(select        order_id,        stime,        etime,        diff,        inx,        start_time,        date_add(start_time,inx)as online_time
from tb3
)--展示数据如下:order_id  stime etime diff  inx start_time  online_time
X01 2021-05-012021-06-023202021-05-012021-05-01X01 2021-05-012021-06-023212021-05-012021-05-02X01 2021-05-012021-06-023222021-05-012021-05-03X01 2021-05-012021-06-023232021-05-012021-05-04X01 2021-05-012021-06-023242021-05-012021-05-05X01 2021-05-012021-06-023252021-05-012021-05-06X01 2021-05-012021-06-023262021-05-012021-05-07X01 2021-05-012021-06-023272021-05-012021-05-08X01 2021-05-012021-06-023282021-05-012021-05-09X01 2021-05-012021-06-023292021-05-012021-05-10...
  1. 按在线日期统计每日在线人数
select online_time,count(*) ct from tb4 groupby online_time;

若不熟悉posexplode方法的童鞋,可以使用row_number函数进行代替也能达到相同的效果。利用上述思路可以很好的解决业务中关于合并重叠区间或时间段的问题。



相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
9月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
772 3
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
347 15
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
462 12
|
SQL 数据库 开发者
ClkLog埋点分析系统支持自定义SQL 查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
ClkLog埋点分析系统支持自定义SQL 查询
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
303 0
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
420 0
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
1320 0