HiveSQL——连续增长问题
注:参考文章:
SQL连续增长问题--HQL面试题35_sql判断一个列是否连续增长-CSDN博客文章浏览阅读2.6k次,点赞6次,收藏30次。目录0 需求分析1 数据准备3 小结0 需求分析假设我们有一张订单表shop_order shop_id,order_id,order_time,order_amt 我们需要计算过去至少3天销售金额连续增长的商户shop_id。数据如下:shop_idorder_amtorder_time11002021-05-10 10:03:5411012021-05-10 10:04:5413002021-0_sql判断一个列是否连续增长https://blog.csdn.net/godlovedaniel/article/details/119080882
0 需求分析
现有一张订单表shop_order ,含有字段shop_id,order_id,order_time,order_amt, 需要统计过去至少连续3天销售金额连续增长的商户shop_id。
1 数据准备
create table shop_order(shop_id int,order_amt int,order_time string
)
row format delimited fields terminated by '\t';
load data local inpath "/opt/module/hive_data/shop_order.txt" into table shop_order;
2 数据分析
完整的代码如下:
with tmp as (selectshop_id,to_date(order_time) as dt,sum(order_amt) as amtfrom shop_ordergroup by shop_id, to_date(order_time)
)
selectshop_id
from (select *,-- 判断日期是否连续date_sub(dt, row_number() over (partition by shop_id order by dt )) as order_date_difffrom (selectshop_id,dt,amt,--判断销售额是否增长-- 当前行的销售金额与上一行的销售金额之间的差值 order_amt_diffamt - lag(amt, 1, 0) over (partition by shop_id order by dt) as order_amt_diff from tmp) t1-- 差值大于0的代表销售额增长where order_amt_diff > 0) t2
group by shop_id, order_date_diff
having count(1) >=3;
输出结果为 shop_id 为2
上述代码分析:
step1: 求出每家商户销售金额连续增长的记录
with tmp as (selectshop_id,to_date(order_time) as dt,sum(order_amt) as amtfrom shop_ordergroup by shop_id, to_date(order_time)
)select *
from (selectshop_id,dt,amt,--判断销售额是否增长-- 当前行的销售金额与上一行的销售金额之间的差值 order_amt_diffamt - lag(amt, 1, 0) over (partition by shop_id order by dt) as order_amt_difffrom tmp) t1-- 差值大于0的代表销售额增长
where order_amt_diff > 0
step2: 求出每家商户至少连续3天销售金额连续增长,在step1的基础上,还要求dt是连续的
with tmp as (selectshop_id,to_date(order_time) as dt,sum(order_amt) as amtfrom shop_ordergroup by shop_id, to_date(order_time)
)select *,-- 判断日期是否连续date_sub(dt, row_number() over (partition by shop_id order by dt )) as order_date_diff
from (selectshop_id,dt,amt,--判断销售额是否增长-- 当前行的销售金额与上一行的销售金额之间的差值 order_amt_diffamt - lag(amt, 1, 0) over (partition by shop_id order by dt) as order_amt_difffrom tmp) t1-- 差值大于0的代表销售额增长
where order_amt_diff > 0
step3: 对商户shop_id以及日期差值order_date_diff这两个字段分组,求出最终结果
with tmp as (selectshop_id,to_date(order_time) as dt,sum(order_amt) as amtfrom shop_ordergroup by shop_id, to_date(order_time)
)
selectshop_id
from (select *,-- 判断日期是否连续date_sub(dt, row_number() over (partition by shop_id order by dt )) as order_date_difffrom (selectshop_id,dt,amt,--判断销售额是否增长-- 当前行的销售金额与上一行的销售金额之间的差值 order_amt_diffamt - lag(amt, 1, 0) over (partition by shop_id order by dt) as order_amt_diff --判断是否增长from tmp) t1-- 差值大于0的代表销售额增长where order_amt_diff > 0) t2
group by shop_id, order_date_diff
having count(1) >=3;
3 小结
date_sub(日期减少函数)
- 语法:date_sub(string startdate,int days)
- 返回值:string
- 说明:返回 开始日期startdate 减去days天后的日期
- 举例:select date_sub('2024-02-01',3) --->2024-01-29
lag
- 语法:lag(column,n,default) over(partition by ....order by....)
- 说明:取得column列前边的第n行数据,如果存在则返回,如果不存在,返回默认值default
针对【日期连续】等类型的题型,一般处理思路:先计算date_sub(dt, row_number() over (partition by shop_id order by dt )) as dt_diff ,再对dt_diff 分组,求count()值
针对【xx连续增长】等类型的题型,一般处理思路:利用前后函数lag或者lead往前/往后取一行,计算两者的差值diff,再利用 if( diff >0,1,0) as flag 等条件判断函数 进行打标签,基于标签再进行后续的分组计算.......
相关文章:

HiveSQL——连续增长问题
注:参考文章: SQL连续增长问题--HQL面试题35_sql判断一个列是否连续增长-CSDN博客文章浏览阅读2.6k次,点赞6次,收藏30次。目录0 需求分析1 数据准备3 小结0 需求分析假设我们有一张订单表shop_order shop_id,order_id,order_time…...

使用cocos2d-console初始化一个项目
先下载好cocos2d-x的源码包 地址 https://www.cocos.com/cocos2dx-download 这里使用的版本是 自己的电脑要先装好python27 用python安装cocos2d-console 看到项目中有个setup.py的一个文件 python setup.py 用上面的命令执行一下。 如果执行正常的话回出现上面的图 然后…...

VitePress-13- 配置-title的作用详解
作用描述 1、title 是当前站点的标题;2、默认值是 :VitePress;3、当使用默认主题时,会直接展示在 页面的【导航条】中;4、一个特殊的作用 : 会作为单个页面的默认标题后缀!除非又指定了【title…...
Rust-AI todo list 开发体验
之前用AI协助开发了一个Vue模块,感觉意犹未尽,所以决定再让AI 来协助我做一个todo list。 todo list对我来说真是一个刚需,从我决定做一件事情,到这件事情做完,我的todo list不但不会减少,反而会增加。 回…...

2024-02-07(Sqoop,Flume)
1.Sqoop的增量导入 实际工作中,数据的导入很多时候只需要导入增量的数据,并不需要将表中的数据每次都全部导入到hive或者hdfs中,因为这样会造成数据重复问题。 增量导入就是仅导入新添加到表中的行的技术。 sqoop支持两种模式的增量导入&a…...
LDAR管理系统解决方案
1、密封点数量不准确 工业企业LDAR项目多委托第三方进行检测,由于前几年由于检测费较高,为减少开支,很多企业只安排检测公司检测了部分密封点,造成密封点遗漏。也有少数企业为了从中谋私利,虚增密封点。 2、密封点台账…...
[vscode]ssh报错: Resolver error: Error: XHR failedscode错误
场景问题:通过vscode ssh连接远程服务器失败,报错:Resolver error: Error: XHR failedscode: 问题原因:~/.vscode-server/bin/一串数字下的vscode-server-linux-x64.tar.gz由于某种原因无法正常下载 解决方式&#x…...

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )
文章目录 Maven是什么?一、Maven安装和配置本地配置文件设置idea配置本地maven 二、基于IDEA的Maven工程创建2.1 Maven工程GAVP属性2.2 Idea构建Maven JavaEE工程 三、Maven工程项目结构说明四、Maven核心功能依赖和构建管理4.1 依赖管理和配置4.2 依赖传递和冲突4.…...

Flume安装部署
安装部署 安装包连接:链接:https://pan.baidu.com/s/1m0d5O3Q2eH14BpWsGGfbLw?pwd6666 (1)将apache-flume-1.10.1-bin.tar.gz上传到linux的/opt/software目录下 (2)解压apache-flume-1.10.1-bin.tar.gz…...
点云从入门到精通技术详解100篇-非结构化道路下无人平台路径规划与运动控制
目录 前言 路径规划方法研究现状 传统规划算法 智能规划算法 规划方法比较...

生成树技术华为ICT网络赛道
9.生成树 目录 9.生成树 9.1.生成树技术概述 9.2.STP的基本概念及工作原理 9.3.STP的基础配置 9.4.RSTP对STP的改进 9.5.生成树技术进阶 9.1.生成树技术概述 技术背景:二层交换机网络的冗余性与环路 典型问题1:广播风暴 典型问题2:MA…...

[HTTP协议]应用层的HTTP 协议介绍
目录 1.前言 2.使用fiddler抓包来观察HTTP协议格式 3.HTTP协议的基本格式 2.1请求 2,1.1首行 2.1.2请求头 2.1.3空行 2.2响应 2.2.1首行 2.2.2响应头 键值对 编辑2.2.3空行 2.2.4载荷(响应正文) 3.认识URL 3.1关于URL encode 1.前言 我们在前面的博客中,简单的…...

Linux 命令基础
Shell概述 Linux操作系统的Shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序,如果把硬件想象成一个球体的中心,内核围绕在硬件的外层管理着…...

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…...
集成开发环境 IntelliJ IDEA的基本使用
集成开发环境 IntelliJ IDEA 是由 JetBrains 开发的一个强大的 Java IDE,它也被广泛用于其他编程语言的开发,如 Kotlin、Scala 和 Groovy 等。IntelliJ IDEA 以其智能的代码补全、代码分析、重构工具和强大的调试功能而闻名。以下是 IntelliJ IDEA 的基本…...

【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境
在后面学习 Flink 相关知识时,会深入源码探究其实现机制。因此,需要现在本地配置好源码阅读环境。 本文搭建环境: Mac M1(Apple Silicon)Java 8IDEAFlink 官方源码 一、 下载 Flink 源码 github 地址:h…...

Spring IoC容器详解
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本概念 Spring IoC容器是Spring框架的核心组件,它实现了控制反转(Inversion of Control,IoC)的设计原则。IoC是一种编程思…...

06 MP之自动填充+SQL执行的语句和速度分析
1. 自动填充 在项目中有一些属性,比如常见的创建时间和更新时间可以设置为自动填充。 1.1 实例 需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段 1.1.1 在数据库增加字段 默认开启驼峰映射 createTime --> create_time…...
3 scala集合-Set
与 Java 的 Set 一样,scala 的 set 中,元素都是唯一的,而且遍历 set 中集合的顺序,跟元素插入的顺序是不一样的。 同样,Set 也包含可变和不可变两种。要实现可变 Set 集合,需要使用类 scala.collection.mu…...

Android应用图标微技巧,8.0系统中应用图标的适配
大家好,2018年的第一篇文章到的稍微有点迟,也是因为在上一个Glide系列结束之后一直还没想到什么好的新题材。 现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了。三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米、华为、OV等国产手机厂…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...