44. 日期交叉问题

news2024/12/28 19:29:32

文章目录

        • 题目需求
        • 思路一
        • 实现一
        • 原理二
        • 实现二
        • 学习链接
        • 题目来源

题目需求

现有各品牌优惠周期表(promotion_info)如下,其记录了每个品牌的每个优惠活动的周期,其中同一品牌的不同优惠活动的周期可能会有交叉。

现要求统计每个品牌的优惠总天数,若某个品牌在同一天有多个优惠活动,则只按一天计算。

期望结果如下(截取部分):

brand (品牌)promotion_day_count (优惠天数)
vivo17
oppo16
redmi22
huawei22

需要用到的表:

各品牌优惠周期表:promotion_info

promotion_idbrandstart_dateend_date
1oppo2021-06-052021-06-09
2oppo2021-06-112021-06-21
3vivo2021-06-052021-06-15

思路一

在这里插入图片描述

实现一

-- 实现一: from 网友
-- 思路: ( 最大活动结束时间 - 最小活动开始时间 + 1 ) 求出总长,然后减去中间没有活动的时间

SELECT brand,
       datediff(max(end_date), min(start_date)) + 1 -
       sum(if(blank_brand_date > 0, blank_brand_date, 0)) promotion_day_count
from (
         SELECT brand,
                start_date,
                end_date,
                datediff(
                        start_date,
                        -- 本次活动开始之前该品牌所有活动中最大的活动结束日期
                        max(end_date)
                            over (partition by brand order by start_date rows BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING)
                    ) - 1 blank_brand_date -- 没有活动的天数
         from promotion_info
     ) t
group by brand;

原理二

在这里插入图片描述

实现二

-- 思路: 已知开始日期和结束日期,动态生成此范围内的日期序列。

-- 2) 按照 brand 分组, 统计每个品牌的优惠总天数
select brand,
       size(collect_set(`current_date`)) as promotion_day_count
from (
         -- 1) 已知开始日期和结束日期,动态生成此范围内的日期序列
         select brand,
                date_add(start_date, pos) as `current_date`
         from promotion_info
                  lateral view posexplode(split(space(datediff(end_date, start_date)), ' ')) tmpTable as pos, val
     ) t1
group by brand;

学习链接

【Hive】生成动态日期序列

题目来源

http://practice.atguigu.cn/#/question/44/desc?qType=SQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊一聊Java中的Steam流 | 京东物流技术团队

1 引言 在我们的日常编程任务中,对于集合的制造和处理是必不可少的。当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用到并行处…

Golang内存分配及垃圾回收

为什么需要垃圾回收? 自动释放不需要的对象,让出存储器资源,无需程序员手动执行 Go V1.3之前是标记-清除算法 具体步骤 缺点:程序卡顿、扫描整个heap、数据清除会产生heap碎片 V1.3之后,做了简单的优化 V1.5之后&a…

AIFORE Smart Fuzzing Based on Automatic Input Format Reverse Engineering

AIFORE: Smart Fuzzing Based on Automatic Input Format Reverse Engineering 1 中国科学院信息工程研究所2清华大学网络科学与网络空间研究院;中关村实验室3华为技术有限公司奇异安全实验室4中国科学院大学网络安全学院5中国人民大学6洛桑联邦理工学院 论文链接 &#xff1a…

PHP实战开发26-使用PHP生成图片验证码并进行校验

文章目录 一、前言二、什么是验证码?三、PHP生成验证码图像3.1 生成验证码文字3.2 创建图像并绘制验证码文字3.3 将验证码存储到Session中 四、前端使用jQuery验证输入4.1 步骤一:创建HTML结构和CSS样式4.2 使用jQuery发送AJAX请求进行校验4.3 步骤三&am…

Head Pose Estimation头部姿态估计任务的基本了解:从数据集开始

目录 前言一、HPE是什么?二、常用数据集1.COFW2.WFLW3.AFLW2000-3D4.300W-LP 三、SOTA workCVPR2022:SynergyNetCVPR2021 Workshop:ASMNet 四、我们想做的贡献 前言 为了检测司机的疲劳状态,除了基于人脸关键点的检测去判断是否闭眼,是否打哈…

基础算法-差分

差分其实就是求前缀和的逆运算 差分数组: Step1 首先给定一个原数组a:a[1], a[2], a[3],,,,,, a[n]; 然后我们构造一个数组b : b[1] ,b[2] , b[3],,,,,, b[i]; 使得 a[i] b[1] b[2 ] b[3] ,,,,,, b[i] 也就是说,a数组是b…

nvm升级node版本

1.首先有安装nvm和配置环境的前提 2、命令查看,切换到D盘目录下 3、安装到指定的版本 nvm安装指定版本的node 输入:nvm install 16.18.1 4、查看已有的node版本 nvm list 5、项目终端查看

【uniapp开发小程序】实现点击跳转手机通话 拨打电话功能

效果图&#xff1a; 代码展示&#xff1a; <template><view class"page-map"><view class"btn" click"telFun()" style"text-align: center;">电话咨询</view></view> </template> <script&g…

如何使用idea来查找所有未使用的代码?

一、目的 通过idea快速找到项目中没有被使用的代码 二、操作步骤 2.1 Code -> Analyze Code -> Run Inspection by Name 2.2 输入Unused declaration -> 查询没有被使用的方法和类 2.3 选择要扫描的范围 2.4 根据结果进行删除&#xff08;反复几次就可以清除干净&a…

如何获取局域网内海康摄像头的IP地址

文章目录 问题解决方法图像分类网络AlexNetVGGNetGooLeNet系列ResNetDenseNetSwin TransformerMAECoAtNetConvNeXtV1、V2MobileNet系列MPViTVITSWAEfficientNet系列MOBILEVITEdgeViTsMixConvRepLKNetTransFGConvMAEMicroNetRepVGGMaxViTMAFormerGhostNet系列DEiT系列MetaFormer…

linux 写c, 编译报错 stdio.h: No such file or directory,compilation terminated.

环境: windows11->subsystem(Ubuntu20)问题: linux 写c, 编译报错如图(fatal error: stdio.h: No such file or directory │compilation terminated. #include <stdio.h>) 复现: #include <stdio.h>int main() {printf("gcc编译报错: \n")return 0;…

产研融合共育人才 金山云“星云训练营”顺利开营

盛夏之日&#xff0c;万物并秀&#xff01;在莘莘学子告别校园、踏入社会的毕业季&#xff0c;金山云第一期星云训练营于7月9日在武汉隆重开营。金山云星云训练营承载着“技术立业”的企业基因&#xff0c;旨在助力学子提升专业技能&#xff0c;掌握前沿技术&#xff0c;为国家…

(02)Cartographer源码无死角解析-(78) ROS数据发布→子图内、子图间、约束与残差发布

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

requestAnimationFrame(请求动画帧)

前言 在Web应用中&#xff0c;实现动画效果的方法比较多&#xff0c;Javascript 中可以通过定时器 setTimeout 来实现&#xff0c;css3 可以使用 transition 和 animation 来实现&#xff0c;html5 中的 canvas 也可以实现。除此之外&#xff0c;html5 还提供一个专门用于请求…

VS2019使用入门

VS2019使用入门 1.Visual Studio任务栏图标显示变白2.从其他项目拷贝文件到当前项目参考文献 配置VS2019 实现简单的c人脸检测项目&#xff0c;可参考本人blog wndows平台VS2019OpenCVcmake简单应用。 1.Visual Studio任务栏图标显示变白 参考[1]&#xff0c;在命令提示符下输…

Wireshark简单使用教程

混合模式 混合模式就是在抓包的时候不轮是有线网络还是WIFI网络等都会将流量给打印出来 1.打开Wireshark抓包软件 2.点击捕获选择选项按钮 3.选中《在接口上使用混杂模式》 &#xff08;默认是开启的&#xff09; 过滤器 过滤器可以只筛选你要的数据包&#xff0c;下图箭…

JAVA主要日志输出工具

日志工具 SLF4J-JCL LOG4J-CORE LOGBACK SLF4J-SIMPLE JCL-OVER-SLF4J LOGBACK-CORE LOG4J LOG4J-API LOG4J-JUL LOG4J-JCL LOGBACK-ACCESS LOGBACK-CLASSIC SLF4-API SLF4J-LOGJ12 LOGBACK-CLASSIC LOG4J-SLF4J-IMPL JAVA日志体系概述 大家目前正在使用的日志输出工具 日志体…

剑指offer刷题笔记--Num41-50

1--数据流中的中位数&#xff08;41&#xff09; 主要思路&#xff1a; 维护两个优先队列&#xff0c;Q1大数优先&#xff0c;存储比中位数小的数&#xff1b;Q2小数优先&#xff0c;存储比中位数大的数&#xff1b; 当存储的数为偶数时&#xff0c;Q1.size() Q2.size(), 中位…

文献阅读笔记 # SimCSE: Simple Contrastive Learning of Sentence Embeddings

《SimCSE: Simple Contrastive Learning of Sentence Embeddings》EMNLP 2021 (CCF-B) Tianyu Gao†∗ Xingcheng Yao‡∗ Danqi Chen†作者来自普林斯顿计算机系和清华大学交叉信息研究院Code & Pre-trained Models 【研究对象】&#xff1a;Sentence Embedding&#xff…

ubuntu RPM should not be used directly install RPM packages, use Alien instead!

ubuntu RPM should not be used directly install RPM packages, use Alien instead! 所以我们最好下载deb版本的安装包 安装 参考文章