SQL查询环比增长 前后行数据对比操作
有一个这样的场景,A公司每年的是一家零售商,有一张表保存每年的营业额度,现在需要对比今年比去年收入是增加了还是减少了加了多少。
首先我们拿到这张表,可以自关联但是关联表的年份需要加1,这样就可以上下年份关联起来,下面我们来实现
select t1.years, t1.SumMoney as t1SumMoney ,case when t2.SumMoney is null then 0 else t2.SumMoney end as t2SumMoney,t1.SumMoney -case when t2.SumMoney is null then 0 else t2.SumMoney end as upMoney from
(select ROW_NUMBER()over(order by Years) as thisId,Years,SumMoney from YearsBusiness ) as t1 left join
(select ROW_NUMBER()over(order by Years) as thisId,Years,SumMoney from YearsBusiness )as t2
on t1.thisId =t2.thisId+1
结果如下:
结果出来了数据也没有问题,但是这样暴露一个问题就是每次操作的时候都进行两次rownumber的生成,这里的排序消耗性能过大,然后关联,我们知道关联越多执行sql的效率就越低,所以我们要是能有方法找到这个数据的上一条记录就好了。
这里我们想到了利用游标,但是每次记录会大量损耗内存,如果数据量一多,那么执行效率也是低。
这里我们找到了sql给我们提供的一个LAG()函数,lag函数里面有三个参数,第一个是表达式,第二个是行补偿,第三个参数是默认值。下面我们来实现
select years,SumMoney,SumMoney-LAG(summoney,1,0)over(order by years) as upMoney
from YearsBusiness
结果如下:
SQL查询环比增长 前后行数据对比操作相关推荐
- 各数据库SQL查询结果多行数据合并成一行
SQL查询结果多行数据合并成一行 一.Oracle函数多行数据合并成一行 二.Mysql函数多行数据合并成一行 三.sqlserver函数多行数据合并成一行 四.postgresql函数多行数据合并成 ...
- 关于SQL查询效率,100w数据,查询只要1秒
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...
- sql如何遍历几百万的表_关于SQL查询效率,100w数据,查询只要1秒
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...
- mysql 增加合计行_如何给SQL查询添加合计行
SQL查询是SQL数据库的核心功能,下面为您介绍给SQL查询添加合计行的方法示例,供您参考,希望对您学习SQL查询能有所帮助. .数据表t_test id 销售人员id 商品 ...
- sql查询字段重复的数据 并且修改数据某个字段
1.sql查询字段重复的数据 并且修改所有行某个字段值 UPDATE 表名 a SET a.要修改的字段名 = 1 WHEREa.重复字段 IN (SELECTb.重复字段FROM(SELECTc.重 ...
- STUFF()函数将查询的多行数据合并为一行
一.stuff函数 (一)说明 STUFF()函数用于删除指定长度的字符,并可以在制定的起点处插入另一组字符. (二)函数 STUFF ( character_expression , start , ...
- python如何清空excel表格_python 删除excel表格重复行,数据预处理操作
使用python删除excel表格重复行. # 导入pandas包并重命名为pd import pandas as pd # 读取Excel中Sheet1中的数据 data = pd.DataFram ...
- SQL查询效率:100w数据查询只需要1秒钟
机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by s ...
- sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行
取出各组的前N行数据是较常见的运算,比如:每个月每种产品销量最高的五天是哪五天,每位员工涨薪最多的一次是哪次,高尔夫会员成绩最差的三次是哪三次,等等.在SQL中,这类运算要用窗口函数以及keep/to ...
最新文章
- KDD 2020 | 理解图表示学习中的负采样
- 用c语言读取和写入文件数据
- 股权证明pos记账权是根据不同节点_中币(ZB)说真的,区块链第四期:关于ETH2.0,你需要了解的——PoS...
- Java实现学生管理系统(完整代码)
- 吴恩达机器学习作业Python实现(五):偏差和方差
- .Net 接入CAS 遇到的坑
- python 画ks曲线_风控模型—区分度评估指标(KS)深入理解应用
- Python入门学习—元组/字符串(FishC)
- 手把手教你使用EndNote X8 详细笔记
- filenet java配置_技术的力量:IPFS新贵Filenet缘何采用Podt
- 五年级上册用计算机探索规律思维导图,五年级上册数学第一单元思维导图 包括小数乘整数小数乘小数积的...
- java脚本错误修复,win10系统使用iE浏览器时不断出现Java活动脚本功能出错问题的操作技巧...
- mysql select_type simple_mysql explain
- 科学计算机上的符号是什么意思,计算器上各个符号的含义是什么?
- 初学C语言1--C语言用什么软件编写
- ESP8266-Arduino编程实例-MMA7455L加速计驱动
- 嵌入式开发学习之--RCC(上)
- 用python画多啦爱梦图片_哆啦a梦画画步骤
- 【京东电商网站主界面仿写——HTML第一部分】
- 【团队】 冲刺一(1/10)
热门文章
- (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节7:缓冲区管理
- 基础编程题之不用加减乘除做加法
- 二叉树经典题之根据二叉树创建字符串(二叉树的括号表示法)
- linux修改文件夹及其下面所有文件的权限(文件夹权限)
- golang flag包(命令行参数解析)
- Linux 主机超全渗透测试命令汇总
- BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
- iOS (封装)一句话调用系统的alertView和alertController
- wpf 将Style应用到 ListView 中的 ListViewItem 元素
- CodeForces 173B Chamber of Secrets spfa