背景

计算同批次(BATCH)同品类(BREED)同名称(NAME)的商品价格(PRICE)的同比和环比。

SQL

SELECTt1.*,t1.THISDATE,t1.PRICE,nvl( round( ( t1.PRICE - t1.lastmonth ) * 100 / lastmonth, 2 ), '0' ) AS hb, --环比nvl( round( ( t1.PRICE - t1.lastyear ) * 100 / lastyear, 2 ), '0' ) AS tb --同比
FROM(SELECTt.*,SUBSTR(TIME, 1, 7) AS THISDATE, --截取TIME字段(yyyy-MM-dd形式)的年月lag ( PRICE, 12 ) over ( partition BY BATCH,BREED,NAME ORDER BY TIME ) AS lastyear, --同比基期值lag ( PRICE ) over ( partition BY BATCH,BREDD,NAME ORDER BY TIME ) AS lastmonth --环比基期值FROMGoodsInfo t ) t1
ORDER BY t1.REPORTDATE DESC

涉及到的SQL函数

nvl(string1, replace_with)

是Oracle的一个函数,如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值, 如果两个参数都为NULL ,则返回NULL。
与之相似作用的函数是Mysql、Oracle中的COALESCE函数。

round(number, num_digits)

number为数字,num_digits为保留几位小数。

substr(ch, pos, length)

ch为截取字段,pos为截取开始位置(1为起始位置),length为截取长度。

lag(ch, length, value) over( order by 列)

提供对当前行之前的指定物理偏移量的行的访问。
ch为偏移作用的字段,length为向下偏移多少位,value为超出行数时默认设置值,value不是必填项。
与之相对的是lead() over()函数,提供对当前行之后的偏移。

over(partition by 列)

partition by分区函数,也可以是over(partition by 列 order by 列)。在执行完select之后,在所得结果集之上进行分区划分。
可以参考这篇partition by对比group by分组函数的文章,更好地理解它的作用。

【SQL】用SQL语句表示同比和环比相关推荐

  1. hive SQL实现占比、同比、环比计算(lag函数,lead函数)

    一.数据准备 -- 创建表并插入数据 CREATE TABLE `saleorder` (`order_id` int ,`order_time` date ,`order_num` int ) -- ...

  2. SQL实现占比、同比、环比指标分析

    一.数据准备工作 表信息和表字段 /*Source Server Type : MySQLSource Host : localhost:3306DATABASE : test01 */ -- --- ...

  3. cs oracle语句跟踪,Oracle执行语句跟踪 使用sql trace实现语句追踪

    1.SQL_Plus自动跟踪: set autotrace on explain          // 显示执行计划 set autotrace traceonly explain // 仅显示执行 ...

  4. SQL update select语句

    SQL update select语句 最常用的update语法是: UPDATE <table_name> SET <column_name1> = <value> ...

  5. MySQL补充部分-SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  6. SQL基础---SQL SELECT DISTINCT 语句

    SQL SELECT DISTINCT 语句 本章讲解 SELECT DISTINCT 语句. SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希 ...

  7. mysql五补充部分:SQL逻辑查询语句执行顺序

    mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...

  8. 将EXCEL中的列拼接成SQL insert插入语句

    工作中经常需要将EXCEL文件中的数据导入到各种数据库,但是对于不熟悉数据库的人来说,如果直接使用命令执行导入,这无疑是一个难题,也是一个风险.这里我们直接在EXCEL文件中拼接成标准的SQL ins ...

  9. SQL ALTER TABLE 语句

    SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下面 ...

  10. SQL SELECT DISTINCT 语句 用法

    SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法 ...

最新文章

  1. python判断两个值是否相等_Python--比较两个字典部分value是否相等
  2. mysql链表_MySql链表语句--博客园老牛大讲堂
  3. Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案
  4. 评估模型如何建立_建立和评估分类ML模型
  5. nodejs异步流程控制
  6. java 强制转换 效率_Java 性能优化:35 个小细节,让你提升 Java 代码的运行效率...
  7. java操作oracle数据_Java连接Oracle数据库操作
  8. 如何实现Activiti的分支条件的自定义配置(转)
  9. SM系列国密算法(转)
  10. 一张图搞懂 Redis 缓存雪崩、缓存穿透、缓存击穿
  11. shell终端行首行尾命令介绍
  12. 虚拟服务器和虚拟主机(空间)的区别
  13. MSN Messenger去广告和其他修改方法
  14. Amesim液压仿真基础与液压知识经验结合专题
  15. Paper和陈丹琦撞车是一种怎样的体验
  16. python遍历列表中所有元素_python如何遍历列表所有元素?
  17. FilterSecurityInterceptor详解
  18. deny后加to do还是doing_还在为动词后面接不定式还是动名词而发愁?点开解惑
  19. det3d python setup.py build develop
  20. 钉钉用“数字生产力”重建未来想象力

热门文章

  1. 小程序二维码生成普通链接并携带参数
  2. 背包问题大全(动态规划)
  3. TapTap实习两周总结
  4. python里的def方法中->代表什么意思
  5. 【pyhton数据预处理】利用pandas模块找出两excel表格差异并进行字段值比较
  6. 计算快递费系统(java版)
  7. ART模式下dex2oat出错导致系统无法正常启动
  8. 移动计算为王——我眼中的下一代计算机产业
  9. 笔记本电脑频繁自动重启_笔记本电脑经常自动重启怎么办
  10. 01 社会网络分析基础理论!