この質問には複数のバリエーションがあることは知っていますが、この形式ではありません。私の元帳テーブルには、基本的な形式で次の列があります。
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | OpeningBalance | Amount | ClosingBalance
DateOfEntry は、トランザクションの挿入時刻を格納する列です。TransactionDate は、手動で入力できるトランザクションの日付のみを格納します。多くのトランザクションは同じ TransactionDate を持つことができるため、ASC をこの順序で並べ替えます TransactionDate、DateOfEntrydate、TransactionID
各行の以前と最終のバランスを維持したい (挿入、削除、または編集時)。残高をさかのぼって知ることができる必要があるため、お勧めできないことはわかっていますが、これらの残高を保存しています。最後の決算残高。
現在の日付のトランザクションを挿入するためにこれを行うことは問題ありません。そのクライアントの最後のレコードを確認し、新しい開始残高としてその終了残高を取得することで簡単に実行できます。
トランザクションを編集、削除、または新しい「過去の」トランザクションを挿入するときに問題があります。その下にある行のバランスを挿入および更新する場所をどのように知ることができますか? これは、SQL クエリだけでは不可能であることを知っています。
今回は、これを行うための最良の方法を知りたいだけです。
多くの人は、日付 A の前に期首残高を取得するために、日付 A の前に金額の SUM() を使用する必要があることを提案しています (最初に借方か貸方かを確認します)。(現在これを行っていますが、残高を保存するように変更したい)
何か提案はありますか?
更新 SUM() を使用しているかどうかも知りたいのですが、クライアントの各トランザクションの後に開始残高と終了残高を動的に生成し、サンプル データのテーブルに保存しない最善の方法は何ですか?
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | Amount
225 | 2012-05-06 18:20:10| 2012-03-01 | 360 | 0 | 100
219 | 2012-05-06 18:09:16| 2012-03-31 | 360 | 1 | 1000
224 | 2012-05-06 18:19:49| 2012-03-31 | 360 | 0 | 100
218 | 2012-05-06 18:08:09| 2012-04-30 | 360 | 1 | 1000
221 | 2012-05-06 18:17:55| 2012-04-30 | 360 | 1 | 1000
222 | 2012-05-06 18:18:58| 2012-04-30 | 360 | 0 | 500
220 | 2012-05-06 18:17:10| 2012-05-01 | 360 | 1 | 1000
223 | 2012-05-06 18:19:28| 2012-05-01 | 360 | 0 | 500
として表示されます
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | "dynamicOpeningBalance" | Amount | "dynamicClosingBalance"
225 | 2012-05-06 18:20:10| 2012-03-01 | 360 | 0 | 0 | 100 |-100
219 | 2012-05-06 18:09:16| 2012-03-31 | 360 | 1 | -100 | 1000 | 900
224 | 2012-05-06 18:19:49| 2012-03-31 | 360 | 0 | 900 | 100 | 800
218 | 2012-05-06 18:08:09| 2012-04-30 | 360 | 1 | 800 | 1000 |1800
221 | 2012-05-06 18:17:55| 2012-04-30 | 360 | 1 | 1800 | 1000 |2800
222 | 2012-05-06 18:18:58| 2012-04-30 | 360 | 0 | 2800 | 500 |2300
220 | 2012-05-06 18:17:10| 2012-05-01 | 360 | 1 | 2300 | 1000 |3300
223 | 2012-05-06 18:19:28| 2012-05-01 | 360 | 0 | 3300 | 500 |2800