1

まず、これはその問題に関する私の最初の質問でした:作成日ごとに数値をグループ化して合計するSQLリクエスト

ここで、より複雑にしたいと想像してください。以前の操作の後、回答のおかげで、結果が日ごとにグループ化されているため、その日の各エントリが追加されます。私はこれを持っています:

1 | 200 | 2010-01-01
2 | 100 | 2010-01-01

これに変換:

1 | 300 | 2010-01-01

これで十分ですが、金額フィールドを毎回インクリメントしたい場合はどうすればよいでしょうか?

1 | 300 | 2010-01-01
2 | 200 | 2010-01-02

となります :

1 | 300 | 2010-01-01
2 | 500 | 2010-01-02
x | (previous amount + this amount) | this date

前の質問への回答のおかげで得たSQLクエリ:

select sum(amount), to_char(date, 'YYYY-MM-DD') 
from mytable 
group by to_char(date, 'YYYY-MM-DD') 
order by sum(amount) ASC;
4

3 に答える 3

3

実行中の合計は、ウィンドウ関数を使用して実行できます。

select sum(amount) over (order by date asc), 
       to_char(date, 'YYYY-MM-DD') 
from mytable 
order by date ASC;

集計結果の実行中の合計が必要な場合は、それをサブクエリに入れます。

select sum(day_total) over (order by date) as running_total,
       day_total, 
       date
from (
  select sum(amount) as day_total, 
         date
  from mytable 
  group by date
) t
order by date

dateが実際のデータ型dateである場合、 to_char() を使用する理由はありません。dateところで、列名に予約語 ( ) を使用するのはあまり良い考えではありません。

ここで重要なのは、定義のorder byas 部分です。over

マニュアルの詳細: http://www.postgresql.org/docs/current/static/tutorial-window.html

于 2012-08-02T11:01:33.340 に答える
1

それは現在の合計です。

次の質問を見てください。Quassnoi による回答では、PostgreSQL が考慮されています。

于 2012-08-02T11:01:23.870 に答える
0

これを試して:

 select date,(select sum(amount)
                    from mytable11 T1 
                    where T1.date<=T2.date
                    )as cum_sum
from mytable11 T2
group by date
于 2012-08-02T11:35:19.457 に答える