2017-03-09 18 views
0

前回の結果を考慮し、開始時の残高がある計算を実行する必要があります。postgresqlの前回の結果が累積されたクエリの計算

数式は、前の結果または初回の利益+ローンの初期値です。これは簡単です:

1- A1=Initial 
2- A2=A1 - B2:profit + C2:loans 
3- A3=A2 - B3:profit + C3:loans 
4- A4=A3 - B4:profit + C4:loans 

これはどのようにsqlでですか?

+0

、どのような結果あなたがしたいです。 – Jasen

答えて

1

SQLでは、再帰的なクエリまたは関数を使用して、の前回の結果をにする必要があります。これはむしろ複雑で、この代わりに窓関数と呼ばれる集約(この場合はsum())を使用できます。これは累積集計とも呼ばれます。

例のセットアップ:

create table my_table(id serial primary key, val int, profit int, loans int); 
insert into my_table values (val, profit, loans) 
(100, null, null), 
(null, 10, 20), 
(null, 20, 10), 
(null, 40, 30); 

問合せ:

あなたが持っている何をすべきかinpput
select 
    id, 
    sum(val) over w + sum(-coalesce(profit, 0)+ coalesce(loans, 0)) over w as val, 
    profit, 
    loans 
from my_table 
window w as (order by id) 
order by id; 

id | val | profit | loans 
----+-----+--------+------- 
    1 | 100 |  |  
    2 | 110 |  10 | 20 
    3 | 100 |  20 | 10 
    4 | 90 |  40 | 30 
(4 rows) 
関連する問題