如何使用其他数据返回列中连续行的差异(mySQL)

时间:2014-01-12 05:53:33

标签: mysql sql

我从mysql表中获取一些事务数据,如下所示:

SELECT bill_no as Document_No, bill_date as Trans_Date, bill_amount as Amount, 0 as Balance
FROM bill_table
WHERE consumer_name = 'John'
UNION
SELECT receipt_no as Document_No, receipt_date as Trans_Date, -receipt_amount as Amount, 0 as Balance
FROM receipt_table
WHERE consumer_name = 'John'
ORDER BY Trans_Date

结果是这样的

+-----------+----------+------+-------+
|Document_No|Order_date|Amount|Balance|
+-----------+----------+------+-------+
|BILL58788  |2010-08-09|493   | 0     |
|BILL58789  |2010-08-10|789   | 0     |
|REC_12379  |2010-08-11|-1282 | 0     |
|BILL58788  |2010-08-12|1493  | 0     |
|BILL58788  |2010-09-01|4930  | 0     |
|REC_12380  |2010-10-02|-2000 | 0     |
+-----------+----------+------+-------+

这给了我所有账单&约翰的收据细节。所有金额都在同一列中,账单金额为正数&收据金额为负数。

在最后一栏'余额'中,我希望动态计算这样的总计连续数量:

+-----------+----------+------+-------+
|Document_No|Order_date|Amount|Balance|
+-----------+----------+------+-------+
|BILL58788  |2010-08-09|493   | 493   |
|BILL58789  |2010-08-10|789   | 1282  |
|REC_12379  |2010-08-11|-1282 | 0     |
|BILL58788  |2010-08-12|1493  | 1493  |
|BILL58788  |2010-09-01|4930  | 6423  |
|REC_12380  |2010-10-02|-2000 | 4423  |
+-----------+----------+------+-------+

我知道我可以在获取数据后在PHP中完成此操作,但我想自己做mySQL。

有可能吗?请帮忙。 在此先感谢。

1 个答案:

答案 0 :(得分:2)

在MySQL中,最简单的方法是使用变量:

select Document_No, bill_date, bill_amount, 
       (@balance := @balance + bill_amount) as balance
from ((SELECT bill_no as Document_No, bill_date as Trans_Date, bill_amount as Amount
       FROM bill_table
       WHERE consumer_name = 'John'
      )
      UNION ALL
      (SELECT receipt_no as Document_No, receipt_date as Trans_Date, -receipt_amount as Amount
      FROM receipt_table
      WHERE consumer_name = 'John'
     )
    ) t cross join
    (select @balance := 0) const
ORDER BY Trans_Date;