我试图从一组数据中获得一个滚动的12个月总计,该数据提供给定的月份和年份的分钟数。在很多情况下,我不会有一个月的记录。是否有一种方法可以显示丢失的月份(值为零),然后将其卷起或不显示,但让查询确认这是12个月范围的一部分。下面的查询是我试图使用的,但它只是抓住了以前的记录,并没有考虑到失踪的月份。下面的查询似乎没有与一些总数有一点关系。任何援助将不胜感激。如何获得一个月范围的滚动年度总计
Select year
, month
, SUM(NVL(minutes, 0)) OVER (order by year,month rows between 11 preceding and current row) as total_minutes
from
(
Select *
from test_table
Order by year, month
)
Order by year desc , month desc
这里是创建测试表和数据的sql。
drop table test_table;
create table test_table (
month number(2),
year number(4),
minutes number(4,2)
);
insert into test_table values (1, 2012, 3);
insert into test_table values (2, 2012, 3);
insert into test_table values (3, 2012, 3);
insert into test_table values (4, 2012, 4);
insert into test_table values (5, 2012, 5);
insert into test_table values (7, 2012, 5);
insert into test_table values (8, 2012, 5);
insert into test_table values (9, 2012, 5);
insert into test_table values (10, 2012, 4);
insert into test_table values (11, 2012, 3);
insert into test_table values (12, 2012, 3);
insert into test_table values (1, 2011, 3);
insert into test_table values (2, 2011, 3);
insert into test_table values (5, 2011, 5);
insert into test_table values (6, 2011, 5);
insert into test_table values (7, 2011, 5);
insert into test_table values (8, 2011, 5);
insert into test_table values (9, 2011, 5);
insert into test_table values (10, 2011, 4);
insert into test_table values (11, 2011, 3);
insert into test_table values (12, 2011, 3);
insert into test_table values (1, 2010, 3);
insert into test_table values (2, 2010, 3);
insert into test_table values (3, 2010, 3);
insert into test_table values (4, 2010, 4);
insert into test_table values (5, 2010, 4);
insert into test_table values (6, 2010, 5);
insert into test_table values (7, 2010, 5);
insert into test_table values (10, 2010, 4);
insert into test_table values (11, 2010, 4);
insert into test_table values (12, 2010, 3);
COMMIT;
谢谢你的帮助。我不确定如何回复解决方案,因为我不得不为自己的工作做出一些改变。无论如何,我真的很感激它。 –