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))) c2from(select brand,stt,edt,nvl(max(edt) over (partition by brand order by stt rows between unbounded precedingand 1 preceding),stt) c1from 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分组,以便为每个品牌计算总的持续时间。

结果输出:

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

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

相关文章

Java中流的概念细分

按流的方向分类: 输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)。 输出流:数据流向是程序到目的地(以OutputStream、Writer结尾的流)。 按处理的数据单元分类: 字…

PVE 虚拟机环境下删除 local-lvm分区

1、删除逻辑卷 lvremote pve/data 2、扩展逻辑卷 lvextend -l 100%FREE -r pve/root 3、 修改存储目录内容 点击 Datacenter - Storage (1)删除local-lvm分区 (2)编辑local分区,在内容一项中勾选所有可选项。

mysql 两个不同字段的表导入数据

下面这个场景就是A表的字段和B表的字段不一样,但是现在我想把b表中的数据导入到A表里面,下面是导入公式如下: 语法: 将SYS_ORG表中的数据导入到sys_depart,但是这两个表的字段不一样,在()里面填写要新增数据…

Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!

最新消息,Spring Boot 一次性发布了 3 个版本: 3.3.0 3.2.6 3.1.13 Spring Boot 3.3 正式发布了,3.1.x 在前几天也停止维护了。 最新的支持版本如下: 从路线图可以看到每个版本的终止时间,每个版本的生命周期只有…

安徽大学数学科学学院教授陈昌昊

男,本(2005-2009)、硕(2009-2012)学位都在湖北大学获得,博士学位在芬兰获得(2012-2016),博士后分别在澳大利亚(2016-2019)、香港(2020…

vue3中el-form表单校验,再点击提交按钮的时候通过校验才进行提交

vue3中el-form表单校验&#xff0c;再点击提交按钮的时候通过校验才进行提交 一、前言1、案例 一、前言 在 Vue 3 中&#xff0c;可以使用 Element UI 的 <el-form> 组件配合 <el-form-item> 来实现表单的必填项校验&#xff0c;并在提交时根据校验结果来决定是否…

clickhouse 中的数组(array)和元组(Tuple)—— clickhouse 基础篇(二)

文章目录 数组判断是否为空计算数组长度获取数组元素判断某个元素是否存在数组切片数组元素展开数组元素去重删除连续重复元素连接多个数组数组倒序数组拍平数组元素映射数组元素过滤数组聚合分析计算数组交集计算数组并集计算数组差集SQL 子查询进行集合操作 元组创建元组获取…

LeetCode刷题之HOT100之二叉树的直径

2024/5/25 阴天。这几天睡眠质量都非常好&#xff0c;一切似乎都在慢慢上升。先把题做了 1、题目描述 2、逻辑分析 题目要求就是给一个二叉树&#xff0c;求出两个节点之间的最大长度即为二叉树的直径。怎么做呢&#xff1f;我想不出来。看一下题解吧。题解给出的解法是深度优…

Swagger2 和 Swagger3 的不同

Swagger2 和 Swagger3 的不同 SpringBoot 整合 Swagger3 和 Swagger2 的主要区别如下&#xff1a; 区别一&#xff1a;引入不同的依赖 如果使用的是 Swagger 3 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter<…

Linux——Docker容器虚拟化平台

安装docker 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 不需要设置防火墙 docker命令说明 docker images #查看所有本地主机的镜像 docker search 镜像名 #搜索镜像 docker pull 镜像名 [标签] #下载镜像&…

学习java第八十天

ApplicationContext有哪些常见实现&#xff1f; FileSystemXmlApplicationContext容器从XML文件加载bean的定义。XML bean配置文件的完整路径必须提供给构造函数。 ClassPathXmlApplicationContext容器也从XML文件加载bean的定义。这里&#xff0c;你需要正确设置classpath因…

mybatis-plus 优雅的写service接口中方法(3)

多表联查 上文讲过了自定义sql &#xff0c;和wrapper的使用&#xff0c;但是我们可以发现 我们查询的都是数据库中的一张表&#xff0c;那么怎么进行多表联查呢&#xff0c;当然也是用自定义sql来进行实现 比如说 查询 id 为 1 2 4 的用户 并且 地址在北京 的 用户名称 普…

Elasticsearch不删原有jdk8导致的系列安装和启动问题

以前在空机器直接装elasticsearch&#xff0c;没有遇到什么问题。今天在现有JDK上安装&#xff0c;遇到的问题记录一下&#xff1a; 1. JDK的环境变量配置与我原有的不一致报如下错误&#xff1a; [estestZK-DES-I root]$ /usr/elasticsearch/bin/elasticsearch could not fi…

python-数据分析与可视化基础

1、data1.csv中的B、C、D和E列数据分别是日期、权重、A企业的销售额、B企业的销售额。读取C、D、E列数据,并统计E列数据的算术平均数、加权平均值(权值为C列数据)、方差、中位数、最小值、最大值。并绘制E列数据的直方图。 &#xff08;1&#xff09;源代码&#xff1a; impo…

JavaScript异步编程:理解和使用Promise、Async/Await

JavaScript是一种单线程语言&#xff0c;这意味着它一次只能执行一个任务。然而&#xff0c;在Web开发中&#xff0c;我们经常需要处理异步操作&#xff0c;例如网络请求、定时器、事件监听等。JavaScript提供了多种方式来处理异步编程&#xff0c;包括回调函数、Promise、Asyn…

什么生信流程语言让你极度爽?

生信流程搭建有多难&#xff1f;行业为解决这一问题提出了各种各样的配方&#xff0c;有你熟悉的吗&#xff1f; 一、困境 - 乱 无数机构投入大量人力物力&#xff0c;以期获得一条条可用的生信流程。而有些流程&#xff0c;由于种种原因&#xff0c;存在着巨大的缺陷&#xf…

安全风险 - 切换后台时背景模糊处理

因为安全风险中提到当app处于后台卡片状态时&#xff0c;显示的卡片页面应该为模糊效果&#xff0c;否则容易泄露用户隐私&#xff0c;尤其当前页涉及个人信息、资产信息等&#xff0c;都会造成信息泄露&#xff01;基于这种场景&#xff0c;我研究了下这种业务下的模糊效果 找…

普通函数的参数中的auto

2.1 普通函数的参数中的auto 从c14起&#xff0c;lambda可以使用auto占位符声明或者定义参数: auto printColl [] (const auto& coll) // generic lambda{ for (const auto& elem : coll) {std::cout << elem << \n;}} 只要支持Lambda 内部的操作&…

【OS】AUTOSAR Os是如何启动第一个Task的

目录 前言 正文 1.总体概览及背景介绍 1.1. Os默认的Hook配置 1.2 用户Task的配置

Golang创建文件夹

方法 package zdpgo_fileimport ("os" )// AddDir 创建文件夹 func AddDir(dir string) error {if !IsExist(dir) {return os.MkdirAll(dir, os.ModePerm)}return nil }测试 package zdpgo_fileimport "testing"func TestAddDir(t *testing.T) {data : […