1

私はテーブルを持っています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し、新しい修正された残高。

または、この種の「台帳会計」を実装するための新しい方法を提案してください。

4

1 に答える 1

0

残念ながら、MySQL はウィンドウ関数をサポートしていませんが、SQL Server のウィンドウ関数のサポートはこの種のクエリに対しても制限されているため、ストアド プロシージャを含むこの以前の回答から解決策を導き出すことができるかもしれません: SQL で実行中の合計を計算するサーバ

于 2011-05-17T07:11:28.430 に答える