2

預金、引き出し、残高を表示するクエリがあります。預金と引き出しを合計して残高を取得します。

ORDER BYdateの場合、クエリと表示は正常に機能しますASC

ただし、期限までに注文したいDESCのですが、これにより残高の表示に問題が発生しています。ここに例があります。

Date   Deposit   Withdrawl   Balance
Jan 2            $2000       -$2000
Jan 1  $5000                 $3000

ご覧のとおり、1 月 1 日の残高を 5000 に、1 月 2 日の残高を 3000 にしたいと考えています。最初に、単純に残高用の列を作成し、行が書き込まれているときに残高を挿入しました。しかし、これは単一の行が更新されたときに問題を引き起こしました。

どんな助けでも大歓迎です!ありがとう。

ここに私が取り組んでいるコードがあります。

$result2 = mysql_query("SELECT * FROM bankaccount_transaction WHERE bankaccount_id = '$id' ORDER BY ID DESC ".$pages->get_limit()) or die(mysql_error());

while($row2 = mysql_fetch_array($result2)) {
$date = date('m-d-Y', strtotime($row2['date']));

if ($row2['deposit'] > 0){
$deposit = $row2['deposit'];
$newdeposit = number_format($deposit,2);
$newtotal += $deposit;
}else{
$newdeposit = '';
}

if ($row2['withdrawl'] > 0){
$withdrawl = $row2['withdrawl'];
$newwithdrawl = number_format($withdrawl,2);
$newtotal -= $withdrawl;
}else{
$newwithdrawl = '';
}

display table

}
4

3 に答える 3

2
SELECT x.*
     , SUM(y.deposit)-SUM(y.withdrawal) Balance 
  FROM transactions x 
  JOIN transactions y 
    ON y.bankaccount_id = x.bankaccount_id
   AND y.date <= x.date
 WHERE x.bankaccount_id='$id' 
 GROUP 
    BY x.date 
 ORDER 
    BY Date DESC;

ここにフィドルがあります

于 2013-05-13T13:06:17.170 に答える
1

私はこのようなことを考えていました:

SELECT 
    m.`date`, 
    m.`deposit`, 
    m.`withdrawal`,
    SUM(t.`deposit`) - SUM(t.`withdrawal`) AS `balance`
FROM `bankaccount_transaction` m 
    JOIN (
            SELECT 
                `date`,
                `deposit`,
                `withdrawal`
            FROM 
                `bankaccount_transaction`
        ) t ON t.`date` <= m.`date`
GROUP BY 
    m.`date`, 
    m.`deposit`, 
    m.`withdrawal`
ORDER BY m.`date` DESC

フィドルを開始できるかどうかを確認しようとしています。

編集:どうぞ:http://sqlfiddle.com/#!2/8d040/9

于 2013-05-13T12:55:53.427 に答える