特定の月と年の分を提供する一連のデータから 12 か月の合計を取得しようとしています。多くの場合、1 か月間記録がありません。欠落している月を値にゼロ (0) を付けて表示し、それをロールアップするか、表示せずに、クエリでこれを 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;