53 列と 100 万行程度のテーブル x があります。最初の列は識別子で、次の 52 列は特定の日付から毎週発生する金融取引です。
例えば。
id,w1,w2,w3,w4,w5..w52
a1,0,5,1,4,0..43
a2,7,0,6,9,4..27
IDごとに、これらすべての週のトランザクションの累積合計が必要です。私が見つけた 1 つの解決策は、unpivot を使用して ID ごとに 52 行を取得してから、集計合計を適用することでした。
sum(transaction) over (partition by id order by week asc)
ここでの問題は、現在 6,000 万行のテーブルがあり、Oracle が合計を取得するまでの並べ替えを非常に遅く実行していることです。
別のオプションは、次のように各列を手動で追加することです。
select
id,
w1,
w1+w2,
w1+w2+w3,
w1+w2+w3+w4,
w1+w2+w3+w4+w5,
..
w1+w2+w3+w4+w5..w49+w50+w51+w52
from x
ここでの問題は、単純な数式を取得するのに大量のコードが必要になることです (コードを書き出すのは大変です!)。
テーブル (インデックス/パーティション) を調整して、非常に多くの行の集計合計を高速化できるものはありますか、または元のテーブルで使用して最小限の労力でこれらの結果を達成できるコードはありますか?!