我試圖從一組數據中獲得一個滾動的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;
謝謝你的幫助。我不確定如何回覆解決方案,因爲我不得不爲自己的工作做出一些改變。無論如何,我真的很感激它。 –