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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 使用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的热门话题分析
目录
相关文章
|
3月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
268 3
|
3月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
1045 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
|
4月前
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
|
7月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
7月前
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
212 15
|
6月前
|
SQL 人工智能 分布式计算
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
113 0
|
8月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
274 12
|
8月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
9月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
353 35

热门文章

最新文章