SQL 窗口函数之lead() over(partition by ) 和 lag() over(partition by )

          lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 LEAD 有更高的效率。

语法解析

over() 表示 lag() 与 lead() 操作的数据都在 over() 的范围内,他里面可以使用 partition by 语句(用于分组) order by 语句(用于排序)。partition by a order by b 表示以 a 字段进行分组,再 以 b 字段进行排序,对数据进行查询。

lead(expression,offset,default) over(partition by ... order by ...)lag(expression,offset,default) over(partition by ... order by ... )

lead(expression,offset,default) expression需要查找的字段,offset往后查找的 offset行的数据(即偏移量),defaultvalue 没有符合条件的默认值

示例

求哪些店铺的电子类产品连续3个月增长

1、查找出每一个店铺电子类产品下个月的销量:LEAD()  OVER()

select  shop,month,dz,lead(dz,1,null)  over(partition by shop oreder by month)  as next_dz   --lead()参数1:目标字段;参数2:步长(是取下1个还是下2个);参数3:取不到给NULLfrom demo_sale

2、用下月销量-当前月销量>0标记为1否则标记为0,我们要取标记为1的条件过滤

select shop,month  from (select shop, month,case when  (next_dz - dz) > 0 then 1 else 0 end as  inc_flag  from (select shop,month,dz,lead(dz,1,null)  over(partition by shop oreder by month)  as next_dz   from demo_sale)  t) t2  where t2.inc_flag =  1

3、求连续3个月增长的店铺:ROW_NUMBER() 

# 截取月份-排序值,如果值相等就是连续增长的,因为rn是以1为差值的等差序列,如果月份-rn得到的值一样,那么就是相邻月份
select shop,substr(month,6,2) - rn  as inc2_flag  # 按照店铺分区,月份升序排序from (select  shop,month,row_number() over(partition by shop  order by month )  as rnfrom (select shop,month from # 计算相邻两个月的销量值(select shop,month,case when  (next_dz - dz) > 0 then 1 else 0 end as  inc_flag from # 数据往下偏移1行,获取下个月的销量(select  shop,month,dz,lead(dz,1,null)  over(partition by shop oreder by month)  as next_dz   from demo_sale)  t) t2 
# 筛选出连续两个月销量增长的店铺 
where t2.inc_flag =  1) t3 ) t4

4、按照shop、inc2_flag聚合group by 数量>=3的店铺就是符合条件的,注意去重。

select  distinct t5.shop from # 因为排序得到的rn是按照以1为差值的等差序列,如果有的月份店铺销量不是增长,那么就会被去掉,导致月份之间的增长不一定是按照1为差值增长的等差序列,
那么得到的inc2_flag就有可能不一样,但是一样的一定是连续增长的月份(select shop,substr(month,6,2) - rn  as inc2_flag   --截取月份-排序值,如果值相等就是连续增长的from (select  shop,month,row_number() over(partition by shop  order by month )  as rnfrom (select shop,month from (select shop,month,case when  (next_dz - dz) > 0 then 1 else 0 end as  inc_flagfrom (select  shop,month,dz,lead(dz,1,null)  over(partition by shop oreder by month)  as next_dz from demo_sale)  t) t2where t2.inc_flag =  1) t3) t4) t5 group by  t5.shop.t5.inc2_flag having count(1)>=3

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

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

相关文章

基于单片机的智慧农业大棚系统(论文+源码)

1系统整体设计 经过上述的方案分析,采用STM32单片机为核心,结合串口通信模块,温湿度传感器,光照传感器,土壤湿度传感器,LED灯等硬件设备来构成整个控制系统。系统可以实现环境的温湿度检测,土壤…

【GPT入门】第1课准备环境

【GPT入门】第1课 准备环境 1.安装conda环境 参考我的安装文档:https://blog.csdn.net/spark_dev/article/details/145071250 2.安装idea,或其它开发软件 3.idea中选择conda的python idea会为每个项目配置一个独立的python环境,方便python版本管理 新建…

【hello git】git rebase、git merge、git stash、git cherry-pick

目录 一、git merge:保留了原有分支的提交结构 二、git rebase:提交分支更加整洁 三、git stash 四、git cherry-pick 共同点:将 一个分支的提交 合并到 到另一个上分支上去 一、git merge:保留了原有分支的提交结构 现有一个模型…

Phi-4-multimodal:图、文、音频统一的多模态大模型架构、训练方法、数据细节

Phi-4-Multimodal 是一种参数高效的多模态模型,通过 LoRA 适配器和模式特定路由器实现文本、视觉和语音/音频的无缝集成。训练过程包括多阶段优化,确保在不同模式和任务上的性能,数据来源多样,覆盖高质量网络和合成数据。它的设计…

简单的二元语言模型bigram实现

内容总结归纳自视频:【珍藏】从头开始用代码构建GPT - 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之七_哔哩哔哩_bilibili 项目:https://github.com/karpathy/ng-video-lecture Bigram模型是基于当前Token预测下一个Token的模型。例如&#x…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中,经历过传统的 pro code 阶段,即活动页面完全由前端开发编码实现,直到 2020 年接入公司内部的低代码活动平台,满足了大部分日常活动的需求,运营可自主配置活动并上线,释…

数据库基础以及基本建库建表的简单操作

文章目录 一、数据库是啥1.1、数据库的概念1.1、关系型数据库、非关系型数据库1.1、数据库服务器,数据库与表之间的关系 二、为啥要使用数据库2.1:传统数据文件存储2.2:数据库存储数据2.3、结论 三、使用数据库了会咋样四、应该咋用数据库&am…

常用无功功率算法的C语言实现(二)

0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…

【Linux】初识线程

目录 一、什么是线程: 重定义线程和进程: 执行流: Linux中线程的实现方案: 二、再谈进程地址空间 三、小结: 1、概念: 2、进程与线程的关系: 3、线程优点: 4、线程…

【单片机】ARM 处理器简介

ARM 公司简介 ARM(Advanced RISC Machine) 是英国 ARM 公司(原 Acorn RISC Machine) 开发的一种精简指令集(RISC) 处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性,成为嵌入式系统、移动…

​​《从事件冒泡到处理:前端事件系统的“隐形逻辑”》

“那天在document见到你的第一眼,我就下定决心要陪你到天荒地老” ---React 我将从事件从出现到被处理的各个过程来介绍事件机制: 这张图片给我们展示了react事件的各个阶段,我们可以看到有DOM,合成事件层,还有…

Django小白级开发入门

1、Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射为最终用户设计较好的管理界面URL 设计设计者友好的模板…

课程《Deep Learning Specialization》

在coursera上,Deep Learning Specialization 课程内容如下图所示:

Java【网络原理】(3)网络编程续

目录 1.前言 2.正文 2.1ServerSocket类 2.2Socket类 2.3Tcp回显服务器 2.3.1TcpEchoServer 2.3.2TcpEchoClient 3.小结 1.前言 哈喽大家好,今天继续进行计算机网络的初阶学习,今天学习的是tcp回显服务器的实现,正文开始 2.正文 在…

安装remixd,在VScode创建hardhat

在终端,以管理员身份,cmd 需要科学上网 npm install -g remix-project/remixd 在vscode插件中,安装solidity插件,是暗灰色那款 1.将nodeJs的版本升级至18以上 2.在vscode打开一个新的文件,在终端输入 npx hardhat 3.…

微服务拆分-远程调用

我们在查询购物车列表的时候,它有一个需求,就是不仅仅要查出购物车当中的这些商品信息,同时还要去查到购物车当中这些商品的最新的价格和状态信息,跟购物车当中的快照进行一个对比,从而去提醒用户。 现在我们已经做了服…

TCP/IP 5层协议簇:网络层(ICMP协议)

1. TCP/IP 5层协议簇 如下: 和ip协议有关的才有ip头 2. ICMP 协议 ICMP协议没有端口号,因为不去上层,上层协议采用端口号

Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!

目录 前言1. 变量(不生效)2. 延迟(生效) 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中,使用 onShow() 钩子来监听页面显示&#xff0…

java_了解反射机制

目录 1. 定义 2. 用途 3. 反射基本信息 4. 反射相关的类 4.1 class类(反射机制的起源) 4.1.1 Class类中的相关方法(方法的具体使用在后面的示例中) 4.2 反射的示例 4.2.1 获得Class对象的三种方式 4.2.2 反射的使用 Fiel…

基于Python的商品销量的数据分析及推荐系统

一、研究背景及意义 1.1 研究背景 随着电子商务的快速发展,商品销售数据呈现爆炸式增长。这些数据中蕴含着消费者行为、市场趋势、商品关联等有价值的信息。然而,传统的数据分析方法难以处理海量、多源的销售数据,无法满足现代电商的需求。…