トランザクション テーブルにある金額を追加しようとしていますが、トランザクションを逆の順序で、それらが属するローンでグループ化して追加する必要があります。いくつかの例を挙げましょう:
Transactions
tid loanid amount entrydate
------------------------------------
1 1 1,500 2013-06-01
2 2 1,500 2013-06-01
3 1 1,000 2013-06-02
4 3 2,300 2013-06-04
5 5 2,000 2013-06-04
6 1 1,100 2013-06-07
7 2 1,000 2013-06-09
| | | |
Loans
loanid
------
1
2
3
4
5
|
ご覧のとおり、loanid 4 のトランザクションはありません。これは、ローンごとにトランザクションが存在する義務がないことを明確にするためです。
今、私が達成しようとしているのは、各ローンのトランザクションの金額を合計することです。この最初のアプローチはこれを実現します。
SELECT tr.tid,
l.loanid,
tr.entrydate,
tr.amount,
@prevLoan:=l.loanid prevloan,
@amnt:=if(@prevLoan:=l.loanid, @amnt+tr.amount, tr.amount) totAmnt
FROM (SELECT * FROM Transactions) tr
JOIN (SELECT @prevLoan:=0, @amnt:=0) t
JOIN Loans l
ON l.loanid = tr.loanid
GROUP BY l.loanid, tr.tid
これは次のようなことを達成します:
tid loanid entrydate amount prevloan totAmnt
-----------------------------------------------------------
1 1 2013-06-01 1,500 1 1,500
3 1 2013-06-02 1,000 1 2,500
6 1 2013-06-07 1,100 1 3,600 <-- final result for loanid=1
2 2 2013-06-01 1,500 2 1,500
7 2 2013-06-09 1,000 2 2,500 <-- final result for loanid=2
4 3 2013-06-04 2,300 3 2,300 <-- final result for loanid=3
5 5 2013-06-04 2,000 5 2,000 <-- final result for loanid=5
| | | | | |
ご覧のとおり、ローンごとに、それに属するトランザクションの金額が totAmnt 列に合計されているため、各ローンの最後のトランザクションには、同じローンのトランザクションの合計が含まれています。
今....私が実際に必要としているのは、合計を逆の順序で実行するためのものです。つまり、各ローンの同じトランザクションの場合、合計は同じ結果になりますが、各ローンの最後のトランザクションから最初のトランザクションまでの合計を計算する必要があります。
私は次のことを試しましたが、役に立ちませんでした (最後のクエリと同じクエリですが、FROM トランザクション テーブルに Order By DESC を使用しています)。
SELECT tr.tid,
l.loanid,
tr.entrydate,
tr.amount,
@prevLoan:=l.loanid prevloan,
@amnt:=if(@prevLoan:=l.loanid, @amnt+tr.amount, tr.amount) totAmnt
FROM (SELECT * FROM Transactions ORDER BY tr.entrydate DESC) tr
JOIN (SELECT @prevLoan:=0, @amnt:=0) t
JOIN Loans l
ON l.loanid = tr.loanid
GROUP BY l.loanid, tr.tid
私は tr.entrydate を使用しています。これは、注文基準を言うためのより親しみやすい方法であり、それが有効な注文基準であるとポリシーが言うことに加えて、tid は何かを言うかもしれませんが、entrydate は Transactions テーブルの注文列です...
前のクエリを使用すると、最初のクエリで取得したのと同じ結果が得られるので、何かが欠けているに違いないと思います。私が必要とするのは、次のような結果を得ることです:
tid loanid entrydate amount prevloan totAmnt
-----------------------------------------------------------
6 1 2013-06-07 1,100 1 1,100
3 1 2013-06-02 1,000 1 2,100
1 1 2013-06-01 1,500 1 3,600 <-- final result for loanid=1
7 2 2013-06-09 1,000 2 1,000
2 2 2013-06-01 1,500 2 2,500 <-- final result for loanid=2
4 3 2013-06-04 2,300 3 2,300 <-- final result for loanid=3
5 5 2013-06-04 2,000 5 2,000 <-- final result for loanid=5
| | | | | |
ご覧のとおり、各ローン ID の合計は同じ最終結果になりますが、トランザクションの合計は逆の順序で行われます...
この混乱がすべて解消されることを願っています...どうすればそのような結果を達成できますか?