• ベストアンサー

SQLで残高計算

現在 id-日付-入金-出金-残高 という5項目あるデータベースがあります。 入出金額を変更した際など、日付でソートをして、すべての行の残高データを再計算し、データを更新したいのですが、どのようなSQL分を使えばよろしいのでしょうか。 ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.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;

kk1126
質問者

補足

SYNTAXエラーが出てしまいます・・・

その他の回答 (2)

回答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行目のデータを無条件で信じてよろしいのですか?

kk1126
質問者

補足

言葉足らずで申し訳ありません。 日付はユニークということで大丈夫です。 最初の残高も、一行目のデータから始めて欲しいです。 よろしくお願いします。

関連するQ&A