我有 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 的所有这些周交易的累积总和。我发现的一种解决方案是使用 unpivot 获取每个 id 的 52 行,然后应用聚合总和。
sum(transaction) over (partition by id order by week asc)
我的问题是我现在有一个包含 6000 万行的表,而 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
这里的问题是要获得一个简单的公式需要大量的代码(写出来很痛苦!)。
无论如何我可以调整我的表(索引/分区)以加快这么多行的聚合总和,或者我可以与原始表一起使用的任何代码以最少的努力实现这些结果?!