次のデータを含むテーブルがあります。
ID In Out
1 100.00 0.00
2 10.00 0.00
3 0.00 70.00
4 5.00 0.00
5 0.00 60.00
6 20.00 0.00
今、私は私に次の結果を与えるクエリが必要です:
ID In Out Balance
1 100.00 0.00 100.00
2 10.00 0.00 110.00
3 0.00 70.00 40.00
4 5.00 0.00 45.00
5 0.00 60.00 -15.00
6 20.00 0.00 5.00
トリガーまたは一時変数またはstoredを使用せずに、1つのクエリでこれを行うことは可能ですか?手順?また、テーブル/グリッドのページネーションで動作します。
私はこの質問を this から作成しました。これに対する答えはまだありません。
quick
ソリューションについては、この仲間を試すことができます:
-- Run this at first to set starting value at zero
SET @variable = 0;
-- Without Pagination
SELECT ID, `In`, `Out`, @variable := @variable + (`In` - `Out`) `Balance`
FROM <your_table>
ORDER BY ID ASC;
-- With Pagination
SELECT ID, `In`, `Out`, @variable := @variable + (`In` - `Out`) `Balance`
FROM <your_table>
ORDER BY ID ASC
LIMIT 0 /* INDEX FOR THE START */, 5 /* NUMBER OF DISPLAYED ITEMS */;
結果の例:
これがhelp/guide
問題解決に向けて、乾杯!
Postgresでタグ付けしたので:
_select id,
"in",
"out",
sum("in") over (order by id) - sum("out") over (order by id) as balance
from data
order by id;
_
上記はPostgres固有ではなく、ウィンドウ関数を使用した標準のANSI SQLです。
オンラインの例: http://rextester.com/ENBLS73027
ページネーションを追加するには、row_number()
を使用します
_select id, "in", "out", balance
from (
select id,
"in",
"out",
sum("in") over (order by id) - sum("out") over (order by id) as balance,
row_Number() over (order by id) as rn
from data
) t
where rn between 3 and 6 -- rows 3,4,5 and 6
order by id;
_