大数据面试SQL(一):合并日期重叠的活动

文章目录
合并日期重叠的活动
一、题目
二、分析
三、SQL实战
四、样例数据参考
合并日期重叠的活动
一、题目
已知有表记录了每个品牌的活动开始日期和结束日期,每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动,如果两个活动至少有一天相同,那他们就是重叠的。
样例数据:
目标结果:
解释:
有两个品牌,分别为小米和华为。
小米:
- 两个活动["2024-01-13","2023-01-20"]和[“2024-01-14","2024-01-17"]重叠,我们将它们合并到一个活动中[“2024-01-13","2024-01-20"]。
华为:
- ["2024-11-09","2024-12-07"]不与任何其他活动重叠,所以我们保持原样。
二、分析
我们首先按照brand分组,根据start_date、end_date 升序排列,按照start_date 进行了升序排列,所以当前行的start_date一定晚于前一行的start_date,对当前行的start_date 和截止到上一行的最大end_date进行比较,如果当前行的start_date 小于等于截止到前一行最大end_date 代表有交叉,可以合并,否则代表不可合并。判断出是否可以合并之后,具体操作合并就转化成类似连续问题。
| 维度 | 评分 |
|---|---|
| 题目难度 | ⭐️⭐️⭐️⭐️⭐️ |
| 题目清晰度 | ⭐️⭐️⭐️⭐️⭐️ |
| 业务常见度 | ⭐️⭐️⭐️⭐️ |
三、SQL实战
1、使用max()函数开窗,获得截止到当前行之前的活动最后日期
这里我们使用max(),按照brand进行分组,然后根据start_date和end_date进行排序,利用聚合函数开窗,开窗函数内有排序则聚合到当前行的特性,进行处理。其中我们这边需要聚合到当前行的上一行。
执行SQL
selectbrand,start_date,end_date,max(end_date) over (partition by brand order by start_date asc,end_date asc rows between unbounded preceding and 1 preceding) as max_end_date
from t1_brand_event;

2、根据当前行的start_day与max_end_date进行比较,得出是否可以合并标记
执行SQL
select brand,start_date,end_date,max_end_date,if(start_date <= max_end_date, 0, 1) as is_merge --0:合并,1:不合并
from (select brand,start_date,end_date,max(end_date)over (partition by brand order by start_date asc,end_date asc rows between unbounded preceding and 1 preceding) as max_end_datefrom t1_brand_event) t

3、连续问题,使用sum()over()进行分组
执行SQL
select brand,start_date,end_date,max_end_date,is_merge,sum(is_merge) over (partition by brand order by start_date asc,end_date asc) as group_id
from (select brand,start_date,end_date,max_end_date,if(start_date <= max_end_date, 0, 1) as is_merge --0:合并,1:不合并from (select brand,start_date,end_date,max(end_date)over (partition by brand order by start_date asc,end_date asc rows between unbounded preceding and 1 preceding) as max_end_datefrom t1_brand_event) t) tt;

4、完成合并,得到最终结果
取每个组内的start_day 的最小值作为活动开始日期,end_day的最大值作为活动结束日期,得到最终结果。
注意分组条件为:brand+group_id
执行SQL
select brand,min(start_date) as start_date,max(end_date) as end_date
from (select brand,start_date,end_date,max_end_date,is_merge,sum(is_merge) over (partition by brand order by start_date asc,end_date asc) as group_idfrom (select brand,start_date,end_date,max_end_date,if(start_date <= max_end_date, 0, 1) as is_merge --0:合并,1:不合并from (select brand,start_date,end_date,max(end_date)over (partition by brand order by start_date asc,end_date asc rows between unbounded preceding and 1 preceding) as max_end_datefrom t1_brand_event) t) tt) ttt
group by brand, group_id; --注意这里的分组,有group_id

四、样例数据参考
--建表语句
CREATE TABLE IF NOT EXISTS t1_brand_event (brand STRING, --品牌start_date STRING, -- 营销活动开始日期end_date STRING -- 营销活动结束日期
);
--数据插入
insert into t1_brand_event(brand, start_date, end_date) values
('小米','2024-01-13','2024-01-20'),
('小米','2024-01-14','2024-01-17'),
('小米','2024-01-14','2024-01-16'),
('小米','2024-01-18','2024-01-25'),
('小米','2024-01-20','2024-01-26'),
('华为','2024-11-09','2024-12-07'),
('华为','2024-12-09','2024-12-23'),
('华为','2024-12-13','2024-12-17'),
('华为','2024-12-20','2024-12-24'),
('华为','2024-12-25','2024-12-30'),
('OPPO','2023-12-01','2024-01-30'),
('OPPO','2023-12-31','2024-06-30');
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
相关文章:
大数据面试SQL(一):合并日期重叠的活动
文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期,每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动,…...
stm32应用、项目、调试
主要记录实际使用中的一些注意点。 1.LCD 1.LCD1602 电路图: 看手册:电源和背光可以使用5v或者3.3v,数据和控制引脚直接和单片机引脚连接即可。 单片机型号:stm32c031c6t6 可以直接使用推完输出连接D0--D7,RS,EN,RW引脚&#…...
WEB渗透-未授权访问篇
WEB渗透未授权访问篇-Redis-CSDN博客 activemq 默认端口8161,默认账户密码admin/admin http://1.1.1.1:8161/admin/connections.jsp PUT /fileserver/%2F%2F2%083.jsp HTTP/1.0 Content-Length: 27 Host: 1.1.1.1:8161 Connection: Close Authorization: Basic YW…...
x86_64、AArch64、ARM32、LoongArch64、RISC-V
以下是对 x86_64、AArch64、ARM32、LoongArch64 和 RISC-V 这几种计算机架构的介绍,包括它们的应用场景、优缺点: 1. x86_64 简介: x86_64 是由 AMD 推出的 64 位扩展版 x86 架构,兼容于英特尔的 IA-32 架构。这一架构被广泛应用于桌面和服…...
git push上不去的问题Iremote reiectedl——文件过大的问题
在新建分支的时候,发现push怎么也上传不上去,一开始觉得是权限的问题,但是尝试了各种方案都没有用,后面再仔细看了一下是文件太大了,远程拒绝推送 接下来,和大家讲讲我的解决方案 1、把修改的代码迁移到新…...
Qt Creator卡顿
删除IDE的配置参数的保存文件夹QtProject,使得Qt Creator恢复出厂值。 C:\Users\替换为你的用户名\AppData\Roaming\QtProject 参考链接: Qt Creator 卡顿 卡死...
数据结构笔记(其五)--串
目录 12.串 12.1 基本操作 12.2 串的存储结构 12.3 字符串的模式匹配算法 (1).朴素模式匹配算法 (2).KMP算法 i.next[]数组的求解 ii.next[]数组的优化——nextval数组 iii.手算nextval数组 iiii.机算nextval数组 + KMP函数 12.串 串,即字符串(string),由零个或多…...
Python爬取高清美女图片
文章概述 本文将详细介绍如何使用Python编写一个简单的爬虫来抓取高清美女图片。我们将利用requests库来发送HTTP请求,使用BeautifulSoup库来解析HTML文档,从而提取出图片的URL并将其下载到本地。 技术栈 Python: 编程语言requests: HTTP客户端库Beau…...
gin路由
1主文件 package main import ("github.com/gin-gonic/gin""godade/user""net/http" ) func main() {router : gin.Default()router.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "Hello World")})v1 : router…...
达梦数据库操作以及报错修改
执行失败(语句1) -6105:: 数据类型不匹配 第12 行附近出现错误 插入sql语句 INSERT INTO "by_ioc_rbac"."user_info" ("user_account", "user_name", "birthday", "password", "gender", "mobi…...
江科大/江协科技 STM32学习笔记P21
文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换,非扫描模式连续转换,非扫描模式单次转换,扫描模式连续转换,扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…...
第三方jar自带logback导致本地日志文件不生成
1.问题及解决 这是依赖的jar包,自己有logback,只打印到控制台,导致我们项目里配置的error级别日志不会生成到日志文件中去。ai给的答案是自己控制加载顺序,但很麻烦,--logging.config也不行,最好下了个7z压…...
国产数据库备份恢复实现
数据库备份恢复是数据库高可用的基本能力,如何通过备份数据快速高效的恢复业务并且满足不同场景下的恢复需求,是各数据库厂商需要关注的要点。本文将介绍几种国产数据库的备份恢复功能,以加深了解。 1、数据库备份恢复方案 数据库备份是生产…...
数据仓库: 2- 数据建模
目录 2- 数据建模2.1 维度建模2.1.1 维度建模的基本概念2.1.1.1 事实表 (Fact Table)2.1.1.2 维度表 (Dimension Table)2.1.1.3 维度 (Dimension)2.1.1.4 度量 (Measure) 2.1.2 维度建模的主要模型2.1.2.1 星型模型 (Star Schema)2.1.2.2 雪花模型 (Snowflake Schema)2.1.2.3 星…...
Tomcat 漏洞
一.CVE-2017-12615 1.使用burp抓包 把get改成put jsp文件后加/ 添加完成后访问 木马 然后木马的网址 在哥斯拉测试并且添加 添加成功 然后我们就成功进去啦、 二.弱口令 点击后输入默认用户名、密码:tomcat/tomcat 登陆之后上传一个jsp文件 后缀改成war 然后访问我…...
分布式消息队列Kafka
分布式消息队列Kafka 简介: Kafka 是一个分布式消息队列系统,用于处理实时数据流。消息按照主题(Topic)进行分类存储,发送消息的实体称为 Producer,接收消息的实体称为 Consumer。Kafka 集群由多个 Kafka 实…...
C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉
本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.迪米特法则(…...
【C++】—— 类与对象(四)
【C】—— 类与对象(四) 6、赋值运算符重载6.1、运算符重载6.1.1、基础知识6.1.2、调用方法6.1.3、前置 与 后置 的重载6.1.4、注意事项6.1.5、<< 和 >> 运算符重载6.1.5.1、<< 和 >> 基础6.1.5.2、日期类 operator<< 的实…...
Qt无边框窗口,关闭后再show,鼠标等事件不响应问题解决办法
问题描述 使用Qt做了一个无边框界面,关闭后再打开,子控件的点击以及hover效果不可用。 setWindowFlags(windowFlags() | Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏解决方案: 在网上发现可以通过重写showEvent(QShowEvent* showE…...
StringJoiner更优雅创建含分隔符的字符序列
文章目录 1 why2 what3 how4 练习手段 1 why StringBuilder拼接包含分隔符的字符序列时,分隔符需要一个一个添加,或者需要手动删除末尾冗余的分隔符,代码不美观,不好看。 比如,单个字符串依次拼接时: Stri…...
Python高效开发技巧汇总
这是一篇关于Python开发的技术文章示例内容,可以替换为真实文章内容。...
避开这些坑!Mapbox图层管理实战:动态加载GeoJSON数据的正确姿势
Mapbox高级图层管理实战:GeoJSON动态加载与性能优化全解析 当处理省级以上GIS数据可视化时,Mapbox的图层管理能力直接决定了应用的流畅度和用户体验。许多开发者在使用GeoJSON数据源时,常遇到内存泄漏、渲染卡顿、交互延迟等问题。本文将深入…...
3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南
3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...
英特尔 BOT 优化 Geekbench 6:性能提升背后的争议与影响
【导语:英特尔的二进制优化工具(BOT)引发关注,它能修改可执行文件指令序列提升性能,但仅与少数应用配合。研究人员对其在 Geekbench 6 上的表现进行测试,结果引发对基准测试公平性的思考。】启动开销&#…...
猫抓cat-catch:高效媒体捕获与资源下载全指南
猫抓cat-catch:高效媒体捕获与资源下载全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch是一款专注于网页媒体资源捕…...
ESLint代码规范(二)
通过配置文件来忽略对指定文件的代码检查ESLint低于7.0.0.eslintignore/config src/utils/**.prettierignore(避免代码被 Prettier 的通用规则修改).eslintcache *.lock yarn-error.log src/utils/**ESLint大于7.0.0.eslintrc.js"ignorePatterns&qu…...
DocRes:统一文档图像修复任务的通用模型技术解析
DocRes:统一文档图像修复任务的通用模型技术解析 【免费下载链接】DocRes [CVPR 2024] DocRes: A Generalist Model Toward Unifying Document Image Restoration Tasks 项目地址: https://gitcode.com/gh_mirrors/do/DocRes 文档图像修复不再需要多个专用模…...
MXene基单原子催化剂在电催化CO2还原中的电子结构调控与性能优化
1. MXene基单原子催化剂为何能成为CO2还原的"黑马"? 在碳中和背景下,电催化CO2还原技术就像一位"化学魔术师",能把温室气体变废为宝。而MXene材料凭借其独特的层状结构和导电性,正成为这场魔术表演的明星道具…...
深度解析ImageToSTL:从二维图像到三维打印模型的技术实现
深度解析ImageToSTL:从二维图像到三维打印模型的技术实现 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left sid…...
详解bat脚本:语法、常见用法、注意事项、示例
文章目录前言1.什么是BAT 脚本2.基本语法2.1 注释2.2 基本命令执行3.常用命令详解4.变量使用1. 定义变量2. 使用变量(要用 % 括起来)5.流程控制5.1 if 条件判断基本语法:常用比较:示例:5.2 for 循环遍历文件࿰…...
