1

次のデータがあるとします。

sequence | amount
1          100000
1          20000
2          10000
2          10000

現在のシーケンスの合計と前のシーケンスの合計を返す SQL クエリを書きたいと思います。そのようです:

sequence | current | previous
1 120000 0
2 20000 120000

ソリューションにはウィンドウ関数が含まれている可能性が高いことは知っていますが、サブクエリなしで実装する方法がよくわかりません。

4

2 に答える 2

0

シーケンスが穴のない「シーケンシャル」である場合は、次のように簡単に実行できます。

SELECT t1.sequence,
  SUM(t1.amount),
  (SELECT SUM(t2.amount) from mytable t2 WHERE t2.sequence = t1.sequence - 1)
FROM mytable t1
GROUP BY t1.sequence
ORDER BY t1.sequence

それ以外の場合は、代わりに次のt2.sequence = t1.sequence - 1ことができます。

SELECT t1.sequence,
  SUM(t1.amount),
  (SELECT SUM(t2.amount) 
   from mytable t2 
   WHERE t2.sequence = (SELECT MAX(t3.sequence) 
                        FROM mytable t3 
                        WHERE t3.sequence < t1.sequence))
FROM mytable t1
GROUP BY t1.sequence
ORDER BY t1.sequence;

このフィドルで両方のアプローチを見ることができます

于 2013-09-14T23:14:49.383 に答える