oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
需求:存在左图销量表,要得到右边的保有量表,保有量等于前12月销量和。
年
月
销量
年
月
保有量
2010
1
4
2010
1
4
2010
2
4
2010
2
8
2010
3
4
2010
3
16
2010
4
4
2010
4
20
2010
5
4
2010
5
24
2010
6
4
2010
6
28
2010
7
4
2010
7
32
2010
8
4
2010
8
36
2010
9
4
2010
9
40
2010
10
4
2010
10
44
2010
11
4
2010
11
48
2010
12
4
2010
12
52
2011
1
4
2011
1
52
2011
2
4
2011
2
52
2011
3
4
2011
3
52
2011
4
4
2011
4
52
2011
5
4
2011
5
52
2011
6
4
2011
6
52
解答:创建例表,便于测试
create table tsales(y,m,n)--年,月,销量
as select 2010, 1, 4 from dual union all
select 2010, 2, 4 from dual union all
select 2010, 3, 4 from dual union all
select 2010, 4, 4 from dual union all
select 2010, 5, 4 from dual union all
select 2010, 6, 4 from dual union all
select 2010, 7, 4 from dual union all
select 2010, 8, 4 from dual union all
select 2010, 9, 4 from dual union all
select 2010, 10, 4 from dual union all
select 2010, 11, 4 from dual union all
select 2010, 12, 4 from dual union all
select 2011, 1, 4 from dual union all
select 2011, 2, 4 from dual union all
select 2011, 3, 4 from dual union all
select 2011, 4, 4 from dual union all
select 2011, 5, 4 from dual union all
select 2011, 6, 4 from dual
--计算保有量(保有量等于前12个月内的销量和)
select t1.*,(select sum(t2.n)
from tsales t2
where (t2.y = t1.y and t2.m <= t1.m)
or (t2.y = t1.y - 1 and t2.m > t1.m)
) as 保有量 from tsales t1
--利用分析函数也可以:
--方法一
select y,m,n,n+LAG(n,11,0)over(order by y,m)+LAG(n,10,0)over(order by y,m)+LAG(n,9,0)over(order by y,m)+
LAG(n,8,0)over(order by y,m)+LAG(n,7,0)over(order by y,m)+LAG(n,6,0)over(order by y,m)+
LAG(n,5,0)over(order by y,m)+LAG(n,4,0)over(order by y,m)+LAG(n,3,0)over(order by y,m)+
LAG(n,2,0)over(order by y,m)+LAG(n,1,0)over(order by y,m) as 保有量from tsales
--方法二
SELECT y,m,n,SUM(n)over(order by y,m rows between 11 preceding and 0 following) QTY
FROM tsales
以上两个分析函数的使用存在错误,保有量的计算是按钮年月前推12个月(即一年内),实际业务中不能保证每个月都有数据(即每个月都有销量),如果我们能确保表中每个月都有销量的话(或将缺省的月份构造成0销量也可)上述两个分析函数的方法可以使用。使用range窗体子句才是正解,如下:
SELECT y,m,n,SUM(n)over(order by y,mrange between 11 preceding and 0 following) QTY.
FROM tsales
分析函数中窗口子句rows和range的区别就是前者以记录数分窗,后者以字段值分窗;
oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)相关推荐
- oracle数据库中求某行的上一条记录和下一条记录
利用oracle提供的lead.lag 函数来查询已有记录的上一条.下一条记录. 求id=ae2e829ecffd4715a5c163f829c2e0f5的上一条记录和下一条记录 上一条记录的sql ...
- 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)
SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N ...
- oracle中取最新的前几条记录(rownum)
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀. ...
- oracle 取前10条记录
1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
Sql Server : Sql代码 select top X * from table_name --查询前X条记录,可以改成需要的数字. select top n * from (select t ...
- oracle查询最高一条记录,oracle 查询已有记录,上一条记录,下一条记录
oracle可以使用 lead.lag 函数来查询已有记录的下一条.上一条记录. 表结构如下: 如要查询Staffno是6-1102的前一条记录 select * from staff where ...
- oracle以10个记录为一页查询,SQL查询前10条记录(SqlServermysqloracle)语法分析
SQL查询前10条记录(SqlServer/mysql/oracle)语法分析 Sql Server : Sql代码 select top X * from table_name --查询前X条记录, ...
- 数据库读取前几条记录的SQL语句大全
1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLEN ...
- 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
最新文章
- Linux下实现USB口的热插拔
- 完整叙述html的语法结构,html article介绍与语法结构
- unsigned a:1;
- java arraylist排序_最全Java集合笔记
- 【Python基础入门系列】第04天:Python 流程控制
- python调用接口测试_Python接口测试实战2 - 使用Python发送请求
- java3D反恐精英3_统一5.3.0f4错误CS0029;不能隐式转换'UnityEngine.Vector3'类型为'float'...
- 吴恩达机器学习(二)多元线性回归(假设、代价、梯度、特征缩放、多项式)
- 【转】java关键字final ,抽象类、接口介绍
- Java 集合中的快速失败(fail-fast)和安全失败(fail-safe)机制
- 科技信息它们叫嚣:没有我们,谈什么iPhone8!
- geoserver样式(SLD方式)—— 图层元素在不同比例尺显示不同样式
- android导航功能介绍,百度导航功能介绍
- Kubernetes 污点与容忍
- android实现b站弹幕,Android弹幕实现:基于B站弹幕开源系统(2)
- 易基因:PIWI/piRNA在人癌症中的表观遗传调控机制(DNA甲基化+m6A+组蛋白修饰)|综述
- bacnet协议--BAC0使用
- JSONPath 解析 JSON 内容详解(自 github)
- vcf无法导入iCloud 通讯录
- SystemUI setSystemUiVisibility参数属性
热门文章
- 内存泄漏的原因及解决办法_编程基础 | C++片段 指针、多态和内存分配
- @Url cannot be used with @GET URL (parameter #1)
- java线程不执行_java线程池,阿里为什么不允许使用Executors?
- php switch 函数,php switch case用法与实例教程
- rpm mysql 指定目录_rpm 安装并配置MySQL(包含指定数据存储路径)
- ios中的视频采集及参数设置和相机操作
- 计算结构体、数组、指针的sizeof
- Netty学习四:Channel
- sulime text 常用快捷键总结
- java删除文件夹的所有文件