たとえば、次のようなテーブルの場合:
ID | col_a | col_b | col_c
=============================
1 |5.0 |7.0 |3
2 |3.0 |6.8 |5
col_c の現在の合計が特定の値よりも小さい col_a / col_b の値を見つける必要があります。
これまでのところ、私は持っています:
select MAX(running_total) as max FROM (select (col_a / col_b) as val, SUM(col_c)
OVER (ORDER BY value ROWS UNBOUNDED PRECEDING) as running_total FROM tableName)
WHERE running_total < 50;
これにより、現在の最大合計が得られますが、この running_total が達成された行の val (col_a/col_b) も必要です。
このクエリには Amazon Redshift を使用しています。これは、mysql とは異なり、val に group by 句を追加せずに、外側の select ステートメントに val を配置できません。クエリのセマンティック全体を変更する group by 句の原因を追加することはできません。
同様の問題の解決策を見つけました-列の最大値を持つ行をフェッチします
ほとんどの場合、これらの解決策は、同じテーブルと結合してから列の値を照合することを示唆していますが、running_total 列が計算され、それを結合するには、もう一度計算する必要がありますか? これはかなり高価に聞こえます。