mysql - 如何返回列中连续行与其他数据的差异 (mySQL)

标签 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 本身完成此操作。

这可能吗?请帮忙。 提前致谢。

最佳答案

在 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;

关于mysql - 如何返回列中连续行与其他数据的差异 (mySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071776/

相关文章:

sql - 我可以在 R 脚本中优雅地包含格式化的 SQL 字符串吗?

php - mySQL 按时间和定义变量的 10 个最近行

mysql - 使用 "SELECT"显示分组结果

mysql - 无法将时间戳列添加到 sql 表的末尾

python - 在 Django 中一次查找最大项目的数量

sql - 根据满足多少 WHERE 条件对查询结果进行排名

php - 函数数组不从数据库中拉回所有行

php - 更新 Mysql 数据库的最快方法

mysql - 如何使用 SUBSTRING_INDEX 的所有索引进行选择

sql - sys.columns.max_length 的替代方案