有一个这样的场景,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查询环比增长 前后行数据对比操作相关推荐

  1. 各数据库SQL查询结果多行数据合并成一行

    SQL查询结果多行数据合并成一行 一.Oracle函数多行数据合并成一行 二.Mysql函数多行数据合并成一行 三.sqlserver函数多行数据合并成一行 四.postgresql函数多行数据合并成 ...

  2. 关于SQL查询效率,100w数据,查询只要1秒

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

  3. sql如何遍历几百万的表_关于SQL查询效率,100w数据,查询只要1秒

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

  4. mysql 增加合计行_如何给SQL查询添加合计行

    SQL查询是SQL数据库的核心功能,下面为您介绍给SQL查询添加合计行的方法示例,供您参考,希望对您学习SQL查询能有所帮助. .数据表t_test id      销售人员id         商品 ...

  5. sql查询字段重复的数据 并且修改数据某个字段

    1.sql查询字段重复的数据 并且修改所有行某个字段值 UPDATE 表名 a SET a.要修改的字段名 = 1 WHEREa.重复字段 IN (SELECTb.重复字段FROM(SELECTc.重 ...

  6. STUFF()函数将查询的多行数据合并为一行

    一.stuff函数 (一)说明 STUFF()函数用于删除指定长度的字符,并可以在制定的起点处插入另一组字符. (二)函数 STUFF ( character_expression , start , ...

  7. python如何清空excel表格_python 删除excel表格重复行,数据预处理操作

    使用python删除excel表格重复行. # 导入pandas包并重命名为pd import pandas as pd # 读取Excel中Sheet1中的数据 data = pd.DataFram ...

  8. SQL查询效率:100w数据查询只需要1秒钟

    机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by s ...

  9. sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行

    取出各组的前N行数据是较常见的运算,比如:每个月每种产品销量最高的五天是哪五天,每位员工涨薪最多的一次是哪次,高尔夫会员成绩最差的三次是哪三次,等等.在SQL中,这类运算要用窗口函数以及keep/to ...

最新文章

  1. KDD 2020 | 理解图表示学习中的负采样
  2. 用c语言读取和写入文件数据
  3. 股权证明pos记账权是根据不同节点_中币(ZB)说真的,区块链第四期:关于ETH2.0,你需要了解的——PoS...
  4. Java实现学生管理系统(完整代码)
  5. 吴恩达机器学习作业Python实现(五):偏差和方差
  6. .Net 接入CAS 遇到的坑
  7. python 画ks曲线_风控模型—区分度评估指标(KS)深入理解应用
  8. Python入门学习—元组/字符串(FishC)
  9. 手把手教你使用EndNote X8 详细笔记
  10. filenet java配置_技术的力量:IPFS新贵Filenet缘何采用Podt
  11. 五年级上册用计算机探索规律思维导图,五年级上册数学第一单元思维导图 包括小数乘整数小数乘小数积的...
  12. java脚本错误修复,win10系统使用iE浏览器时不断出现Java活动脚本功能出错问题的操作技巧...
  13. mysql select_type simple_mysql explain
  14. 科学计算机上的符号是什么意思,计算器上各个符号的含义是什么?
  15. 初学C语言1--C语言用什么软件编写
  16. ESP8266-Arduino编程实例-MMA7455L加速计驱动
  17. 嵌入式开发学习之--RCC(上)
  18. 用python画多啦爱梦图片_哆啦a梦画画步骤
  19. 【京东电商网站主界面仿写——HTML第一部分】
  20. 【团队】 冲刺一(1/10)

热门文章

  1. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节7:缓冲区管理
  2. 基础编程题之不用加减乘除做加法
  3. 二叉树经典题之根据二叉树创建字符串(二叉树的括号表示法)
  4. linux修改文件夹及其下面所有文件的权限(文件夹权限)
  5. golang flag包(命令行参数解析)
  6. Linux 主机超全渗透测试命令汇总
  7. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
  8. iOS (封装)一句话调用系统的alertView和alertController
  9. wpf 将Style应用到 ListView 中的 ListViewItem 元素
  10. CodeForces 173B Chamber of Secrets spfa