- ベストアンサー
SQLで残高計算
現在 id-日付-入金-出金-残高 という5項目あるデータベースがあります。 入出金額を変更した際など、日付でソートをして、すべての行の残高データを再計算し、データを更新したいのですが、どのようなSQL分を使えばよろしいのでしょうか。 ご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか。 UPDATE テーブル名,(SELECT id,(SELECT COALESCE(sum(P.入金),0)-COALESCE(sum(P.出金),0) FROM テーブル名 P WHERE (P.日付<A.日付) OR (P.日付=A.日付 AND P.id<=A.id) ) AS zzz FROM テーブル名 A) AS tmp SET テーブル名.残高=tmp.zzz WHERE テーブル名.id=tmp.id;
その他の回答 (2)
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
回答No.2
SELECT T1.ID,T1.日付 ,(SELECT SUM(T2.入金)-SUM(T2.出金) AS 残高 FROM テーブル名 T2 WHERE T1.日付>=T2.日付) FROM テーブル名 T1 の処理結果を一旦作業テーブルにINSERTし、そのテーブルを使ってUPDATEするのはどうでしょうか。
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.1
>日付でソート 日付はユニークであるという認識でよろしいのですか? もしくは日付が同じ場合はidの逆順(正順?)でソートするなど必要があるのでしょうか? また最初の残高は、ソートした1行目のデータを無条件で信じてよろしいのですか?
質問者
補足
言葉足らずで申し訳ありません。 日付はユニークということで大丈夫です。 最初の残高も、一行目のデータから始めて欲しいです。 よろしくお願いします。
補足
SYNTAXエラーが出てしまいます・・・