Hsql每日一题 | day03

前言

就一直向前走吧,沿途的花终将绽放~

题目:打折日期交叉问题

如下为平台商品促销数据:字段为品牌,打折开始日期,打折结束日期
brand stt        edt
oppo,2021-06-05,2021-06-09
oppo,2021-06-11,2021-06-21
vivo,2021-06-05,2021-06-15
vivo,2021-06-09,2021-06-21
redmi,2021-06-05,2021-06-21
redmi,2021-06-09,2021-06-15
redmi,2021-06-17,2021-06-26
huawei,2021-06-05,2021-06-26
huawei,2021-06-09,2021-06-15
huawei,2021-06-17,2021-06-21

计算每个品牌总的打折销售天数,注意其中的交叉日期,比如 vivo 品牌,
第一次活动时间为 2021-06-05 到 2021-06-15,第二次活动时间为 2021-06-09 到 2021-06-21 其中 9 号到 15号为重复天数,
只统计一次,即 vivo 总打折天数为 2021-06-05 到 2021-06-21 共计 17 天。

建表:

数据准备:

create table t18(
   brand             string,
   stt           string,
   edt           string
)row format delimited fields terminated by '\t';
load data local inpath '/opt/data/t18.txt' overwrite into table  t18;

需求实现:

select brand,sum(c2)
from(
    select brand,datediff(edt,if(stt>=c1,stt,date_add(c1,1))) c2
    from(
        select brand,stt,edt,
               nvl(max(edt) over (partition by brand order by stt rows between unbounded preceding
                   and 1 preceding),stt) c1
        from t18
        ) t1
    )t2 where c2 > 0 group by brand;

 hsql语句分析:

  1. 最内层查询(子查询t1):

    • t18表中选择brandsttedt
    • 使用窗口函数MAX(edt) OVER (...)计算每个品牌下,按stt排序的每个行之前的最大edt值。这个窗口的范围是从所有之前的行(unbounded preceding)到当前行之前的那一行(1 preceding)。
    • 如果当前行的stt大于或等于这个计算出的最大edt(即c1),那么使用stt作为c1的值,否则使用c1的次日(date_add(c1, 1))。这是为了确保c1总是小于或等于当前行的stt,从而避免负的持续时间。
    • 使用nvl函数(这通常是Oracle数据库中的函数,用于处理NULL值,但在其他数据库中可能是COALESCE或类似的函数)来处理可能的NULL值。如果窗口函数没有返回任何行(即对于每个品牌的第一行),则c1将默认为stt
  2. 中间层查询(子查询t2):

    • 基于最内层查询的结果,计算每个事件或时间段的持续时间c2。这是通过计算edtc1之间的日期差来实现的(datediff(edt, c1))。
    • 需要注意的是,由于在最内层查询中已经确保了c1总是小于或等于stt,所以这里计算出的c2应该总是非负的或零。
  3. 最外层查询:

    • 从中间层查询中选择brand和持续时间c2的总和。
    • 使用WHERE子句过滤掉持续时间为0的情况(虽然根据前面的逻辑,这种情况应该已经不存在了,但这里可能是为了额外的明确性)。
    • 使用GROUP BY子句按brand分组,以便为每个品牌计算总的持续时间。

结果输出:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

共享经济中的创新演示:打造案例分析PPT,让想法流动起来

在当今这个看图说话的时代,无论是在职场打拼还是学术殿堂,一份牛气冲天的案例分析PPT无疑是你专业形象的加分项。 不管你是刚出道的小鲜肉,还是已经混迹江湖多年的老鸟,一份有深度、有力度的PPT都能帮你在人群中脱颖而出&#xf…

IT行业已经饱和?2024年报考计算机类专业还有出路吗?

👆点击关注 获取更多编程干货👆 “高薪”光环加持,IT行业一直是不少人心仪的职业选择,计算机专业一度成为最热门的本科专业。 然而,正因报考计算机专业、想要入行IT行业的人越来越多,“行业饱和”、“人才…

Nodejs 第七十三章(网关层)

什么是网关层(getway)? 技术选型fastify 速度快适合网关层 fastify教程上一章有讲 网关层是位于客户端和后端服务之间的中间层,用于处理和转发请求。它充当了请求的入口点,并负责将请求路由到适当的后端服务,并将后端服务的响应…

免费的八字软件

无敌八字排盘软件完全免费使用,即使用不需要付费且无任何限制。同时推出手机版电脑版,两版本数据互通互用,即电脑版的数据可以备份到手机版上导入,手机版的数据也可以备份到电脑版上恢复导入,方便手机和电脑共用的朋友…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(十九)- JUC(5)

synchronized优化原理 轻量级锁 如果一个对象有多个线程访问,但多线程访问的时间是错开的(没有竞争),可以用轻量级锁优化 Slf4j(topic "c.ExerciseTransfer")public class Test {​static final Object obj new Obj…

AI爆文写作:如果你有一篇文章爆了,正确的做法是:自己抄袭自己,重复发,还可以继续爆!

爆款总是相似的,如果你有一篇文章爆了,正确的做法,就是重复发,让它继续爆下去。 以前我在小红书看到一个人,将一篇自己火的笔记,连续发了5次,每次点赞数据都不错。 公众号文章也是一样的。 我…

Halcon 极坐标转换图像

一、概述 先看效果 将圆形的用极坐标转换成矩性然后再进行识别或者其他缺陷检测,最后在还圆到原图中 二、原理: halcon 圆环类缺陷检测的一种方法(极坐标变换法)_halcon缺口检测-CSDN博客 图像极坐标变换与反变换(…

谈恋爱没经验?那就来刷谈恋爱经验宝宝吧

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…

IDEA连接MySQL后如何管理数据库

上一节讲解了IDEA如何连接MySQL数据库管理系统,接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办?本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…

SpringMVC笔记

一、SpringMVC 简介 1.1 什么是 MVC MVC 是一种软件架构的思想,将软件按照模型、视图、控制器来划分 1.M:Model 模型层,指工程中的 JavaBean ,作用是处理数据 JavaBean 分为两类 实体类Bean:专门存储业务数据的…

在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style

项目开发要求好的编写代码格式规范,常用的是根据Google C Style Guide 网上查了很多博文,都不太一样有的也跑不起来,通过尝试之后,自己可算折腾好了,整理一下过程 背景: 编译器主要有三部分:前…

最简单的 UDP-RTP 协议解析程序

最简单的 UDP-RTP 协议解析程序 最简单的 UDP-RTP 协议解析程序原理源程序结果下载链接参考 最简单的 UDP-RTP 协议解析程序 本文介绍网络协议数据的处理程序。网络协议数据在视频播放器中的位置如下所示。 本文中的程序是一个 UDP/RTP 协议流媒体数据解析器。该程序可以分析 …

路由_传递params参数和query参数

传递params参数 传递params参数可以直接在路径后面加上参数: 上述就是在路径变化的时候传过去三个值分别为哈哈、嘿嘿、呵呵的参数 但是这样的话会被认为三个参数是路径的一部分,计算机没有办法区分哪些是路径哪些是参数,所以首先要在这条路…

【新】snapd申请Let‘s Encrypt免费SSL证书、自动化续签证书

简介 之前写过一篇certbot申请SSL证书的文章:SSL证书申请,写得比较详细,但是最近发现使用snapd会更方便。 使用机器:Ubuntu 20.04 简单步骤 1、首先安装必要软件 sudo apt install snapd sudo apt install certbot sudo apt …

数据结构——顺序表基本操作的实现(初始化、取值、查找、插入)

一、线性表与顺序表的概述 线性表的数据元素的逻辑特征是线性的,是一种典型的线性结构。这样的结构可以借鉴数组,如数组a[10]中,a[1]前一定是a[0],a[1]后一定是a[2],首结点(a[0])前面无元素&am…

基于springboot+vue的致远汽车租赁系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

如何用AI工具提升日常工作效率,帮我们提速增效减负

昨天,coze海外版支持了GPT4o, 立马体验了下,速度杠杠的。 https://www.coze.com 支持chatGP和gemini模型,需要科学上网。国内 https://www.coze.cn支持语雀、KIMI模型。 这里回到正题, 如何用AI工具提升日常工作效率…

对于高速信号完整性,一块聊聊啊(10)

本文包含的主要内容有: 过孔设计概述:从前面的各种基础知识到过孔设计,逐步对信号完整性有了初步了解,在过孔设计这里稍微做一个概述,也是个人的一些理解,算是一个小结。 过孔设计的必要性。 过孔结构的基础知识 实例:过孔设计仿真HFSS实例 过孔设计概述 通过前面…

2024年电工杯A题论文首发+摘要分享+问题一代码分享

问题一论文代码链接:https://pan.baidu.com/s/1kDV0DgSK3E4dv8Y6x7LExA 提取码:sxjm --来自百度网盘超级会员V5的分享 园区微电网风光储协调优化配置 摘要:园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的…

C# Sdcb.PaddleInference 中文分词、词性标注

C# Sdcb.PaddleInference 中文分词、词性标注 目录 效果 项目 代码 下载 参考 效果 项目 代码 using Sdcb.PaddleNLP.Lac; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace C__Sdcb.Pad…