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

大数据面试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实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期&#xff0c;每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…...

stm32应用、项目、调试

主要记录实际使用中的一些注意点。 1.LCD 1.LCD1602 电路图&#xff1a; 看手册&#xff1a;电源和背光可以使用5v或者3.3v&#xff0c;数据和控制引脚直接和单片机引脚连接即可。 单片机型号&#xff1a;stm32c031c6t6 可以直接使用推完输出连接D0--D7,RS,EN,RW引脚&#…...

WEB渗透-未授权访问篇

WEB渗透未授权访问篇-Redis-CSDN博客 activemq 默认端口8161&#xff0c;默认账户密码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 这几种计算机架构的介绍&#xff0c;包括它们的应用场景、优缺点&#xff1a; 1. x86_64 简介: x86_64 是由 AMD 推出的 64 位扩展版 x86 架构&#xff0c;兼容于英特尔的 IA-32 架构。这一架构被广泛应用于桌面和服…...

git push上不去的问题Iremote reiectedl——文件过大的问题

在新建分支的时候&#xff0c;发现push怎么也上传不上去&#xff0c;一开始觉得是权限的问题&#xff0c;但是尝试了各种方案都没有用&#xff0c;后面再仔细看了一下是文件太大了&#xff0c;远程拒绝推送 接下来&#xff0c;和大家讲讲我的解决方案 1、把修改的代码迁移到新…...

Qt Creator卡顿

删除IDE的配置参数的保存文件夹QtProject&#xff0c;使得Qt Creator恢复出厂值。 C:\Users\替换为你的用户名\AppData\Roaming\QtProject 参考链接&#xff1a; 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请求&#xff0c;使用BeautifulSoup库来解析HTML文档&#xff0c;从而提取出图片的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基本结构输入通道转换模式单次转换&#xff0c;非扫描模式连续转换&#xff0c;非扫描模式单次转换&#xff0c;扫描模式连续转换&#xff0c;扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…...

第三方jar自带logback导致本地日志文件不生成

1.问题及解决 这是依赖的jar包&#xff0c;自己有logback&#xff0c;只打印到控制台&#xff0c;导致我们项目里配置的error级别日志不会生成到日志文件中去。ai给的答案是自己控制加载顺序&#xff0c;但很麻烦&#xff0c;--logging.config也不行&#xff0c;最好下了个7z压…...

国产数据库备份恢复实现

数据库备份恢复是数据库高可用的基本能力&#xff0c;如何通过备份数据快速高效的恢复业务并且满足不同场景下的恢复需求&#xff0c;是各数据库厂商需要关注的要点。本文将介绍几种国产数据库的备份恢复功能&#xff0c;以加深了解。 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文件后加/ 添加完成后访问 木马 然后木马的网址 在哥斯拉测试并且添加 添加成功 然后我们就成功进去啦、 二.弱口令 点击后输入默认用户名、密码&#xff1a;tomcat/tomcat 登陆之后上传一个jsp文件 后缀改成war 然后访问我…...

分布式消息队列Kafka

分布式消息队列Kafka 简介&#xff1a; Kafka 是一个分布式消息队列系统&#xff0c;用于处理实时数据流。消息按照主题&#xff08;Topic&#xff09;进行分类存储&#xff0c;发送消息的实体称为 Producer&#xff0c;接收消息的实体称为 Consumer。Kafka 集群由多个 Kafka 实…...

C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.迪米特法则&#xff08;…...

【C++】—— 类与对象(四)

【C】—— 类与对象&#xff08;四&#xff09; 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做了一个无边框界面&#xff0c;关闭后再打开&#xff0c;子控件的点击以及hover效果不可用。 setWindowFlags(windowFlags() | Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏解决方案&#xff1a; 在网上发现可以通过重写showEvent(QShowEvent* showE…...

StringJoiner更优雅创建含分隔符的字符序列

文章目录 1 why2 what3 how4 练习手段 1 why StringBuilder拼接包含分隔符的字符序列时&#xff0c;分隔符需要一个一个添加&#xff0c;或者需要手动删除末尾冗余的分隔符&#xff0c;代码不美观&#xff0c;不好看。 比如&#xff0c;单个字符串依次拼接时&#xff1a; Stri…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...