暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 过去12个月的滚动金额

askTom 2017-03-01
840

问题描述

您好,先生-尝试计算滚动金额左右。

创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号)
我需要列出col1,col2的值以及以下计算的值 (我相信它是滚动和)
{年,月 (例如: 2016,02),col1,col2的总和 (金额)}/{过去12个月的总和 (金额) 3月15日2月16日}。尝试在单个SQL中或使用任何分析函数等。

创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号);



插入tbl1值 (2015,'1','abc','temp123',7259.1);

插入tbl1值 (2015,'1','def','temp123',7259.1);

插入tbl1值 (2015,'1','def','temp345',729.1);

插入tbl1值 (2015,'3','abc','temp35',659);


插入tbl1值 (2014,'1','abc','temp123',259);

插入tbl1值 (2014,'2','def','temp123',7259.45);

插入tbl1值 (2014,'1','def','temp345',874.8);

插入tbl1值 (2013,'2','val2','temp123',6547.8);

插入tbl1值 (2013,'3','val2','temp345 ',862.0);

插入tbl1值 (2013,'3','val3','temp345 ',659);

希望我足够清楚

专家解答

您可以使用analytics的窗口子句获得滚动总和 (或计数,或其他)。这指定了要包括在计算中的行数或值范围。

你不知道在过去的12个月里会有多少行。所以你需要使用范围。您可以使用它来声明要从当前行包含的值的偏移量。

您的 “日期” 是单独的年份和月份值。使用这些计算偏移量是很棘手的。首先将它们转换为日期要容易得多。然后,您可以指定要回顾 (或向前) 的月数作为间隔。

这给你:

create table tbl1 ( 
  year number, month varchar2(3), col1 varchar2(10), col2 varchar2 (20), amount number
);

insert into tbl1 values (2015, '1', 'abc','temp123',7259.1);
insert into tbl1 values (2015, '1', 'def','temp123',7259.1);
insert into tbl1 values (2015, '1', 'def','temp345',729.1);
insert into tbl1 values (2015, '3', 'abc','temp35',659);
insert into tbl1 values (2014, '1', 'abc','temp123',259);
insert into tbl1 values (2014, '2', 'def','temp123',7259.45);
insert into tbl1 values (2014, '1', 'def','temp345',874.8);
insert into tbl1 values (2013, '2', 'VAL2','temp123',6547.8);
insert into tbl1 values (2013, '3', 'VAL2','temp345',862.0);
insert into tbl1 values (2013, '3', 'VAL3','temp345',659);

select t.*, 
       sum(amount) over (
         order by to_date(year || lpad(month, 2, '0') || '01', 'yyyymmdd')
         range between interval '12' month preceding and current row
       ) sm_12_months
from tbl1 t
order by to_date(year || lpad(month, 2, '0') || '01', 'yyyymmdd');

YEAR   MONTH  COL1  COL2     AMOUNT    SM_12_MONTHS  
2,013  2      VAL2  temp123  6,547.8   6,547.8       
2,013  3      VAL2  temp345  862       8,068.8       
2,013  3      VAL3  temp345  659       8,068.8       
2,014  1      abc   temp123  259       9,202.6       
2,014  1      def   temp345  874.8     9,202.6       
2,014  2      def   temp123  7,259.45  16,462.05     
2,015  1      abc   temp123  7,259.1   23,640.55     
2,015  1      def   temp123  7,259.1   23,640.55     
2,015  1      def   temp345  729.1     23,640.55     
2,015  3      abc   temp35   659       15,906.3
复制


您可以在以下位置阅读更多信息:

http://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23sql-1906475.html

或在以下位置观看Connor的视频:

https://www.youtube.com/watch?v=dovPI166tcs
https://www.youtube.com/watch?v=oeRZFZUXs1U

PS-共享LiveSQL链接时,您不能仅从会话中复制粘贴URL!您需要先将其保存为公共脚本。然后共享公共URL。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论