私はテーブルを持っていますaccount(ID,TransDate,amount,isDebit,balance)
。明らかに、これはわかりやすくするために私のテーブルの縮小版です。TransDate
はエントリが作成される日付で、isDebit
この取引が DEBIT か CREDIT かを示すブール値です。
新しいエントリが作成されるとtransDate
、最後に作成されたエントリよりも古いエントリになる可能性があるため、正しい場所に配置し、その位置より下にあるすべての行のバランスを変更する必要があります. そこで、行を transDate ASC 、ID ASC で並べ替えます。これにより、エントリの正しい順序が得られます。
残高は、現在の金額を前の最後の残高 ID DEBIT に追加することによって生成され、現在のエントリが CREDIT の場合は差し引かれます。
次の最後の 5 つのエントリがありますsorted by transDate ASC , ID ASC
。
例として account(ID,TransDate,amount,isDebit,balance)
41 | 2011-04-10 | 1000 | 1 | 1000 // as this is the first entry but not always
37 | 2011-05-14 | 7500 | 1 | 8500
39 | 2011-05-14 | 6500 | 0 | 2000
46 | 2011-05-15 | 1000 | 1 | 3000
誰でもクエリを生成できますか:
次の詳細で新しいエントリを作成するには:<ID auto> | 2011-05-9 | 1000 | 1 | <balance>
クエリは、新しいエントリの位置が ID 41 の行の後、行 ID 37 の前にあることを検出する必要があります。また、Id 41
(この行の残高は新しい行の残高を計算するために使用されるため)から行をフェッチbelow
し、新しい修正された残高。
または、この種の「台帳会計」を実装するための新しい方法を提案してください。