次のような時系列データを含むテーブル S があります。
key day delta
特定のキーについて、日数が欠落する可能性はありますが、ほとんどありません。
この累積データを別のテーブルに挿入する目的で、デルタ値 (正の INT) から累積列を作成したいと思います。これは私がこれまでに得たものです:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
私の SQL フレーバーでは、デフォルトのウィンドウ句は RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ですが、明示的にするためにそこに残しました。
このクエリは非常に遅く、累積カウントに 0 を入力した古い壊れたクエリよりも桁違いに遅いです。累積数を生成する他の方法に関する提案はありますか?
私はここで解決策を見ました: テーブル内のグループ化されたレコードによる累計
私が使用している RDBM は Vertica です。Vertica SQL は最初のサブセレクト ソリューションを排除し、そのクエリ プランナーは、2 番目の左外部結合ソリューションが上記の分析形式よりも約 100 倍コストがかかると予測します。