Mysql查询计算运行余额

Mysql查询计算运行余额,mysql,Mysql,大家好,我希望有人能帮助我。我有一个表,我想创建一个mysql查询,在最后一个表中添加一列,计算存款金额和支票发行金额的流动余额存款金额-支票发行金额=流动余额 tbl 我希望在最后一页创建这种带有BALANCE列的表 ------------------------------------------------------------------------------ | Date_Deposited | deposited_amount | Date_Cheque_Issued | is

大家好,我希望有人能帮助我。我有一个表,我想创建一个mysql查询,在最后一个表中添加一列,计算存款金额和支票发行金额的流动余额存款金额-支票发行金额=流动余额

tbl

我希望在最后一页创建这种带有BALANCE列的表

------------------------------------------------------------------------------
| Date_Deposited | deposited_amount | Date_Cheque_Issued | issued_amount | Bal |
-------------------------------------------------------------------------
May 16, 2019        1,000.00          May 16, 2019       500.00         500.00                                           
                                      May 17, 2019       100.00         400.00
May 18 2019         1,000.00                                          1,400.00

运行平衡可以使用计算公式进行计算。可以使用以下查询:

create TEMPORARY table tbl_temp (select * from tbl);
update tbl t1 set t1.Bal=(SELECT SUM(t2.deposited_amount-t2.issued_amount) FROM tbl_temp t2 WHERE t2.id<=t1.id);
select * from tbl;
需要临时表,因为要更新的表将在更新期间被锁定,因此不能同时用于更新和选择。请注意,临时表仅在与MySQL服务器的连接期间存在


上面的查询使用一个子查询,该子查询返回临时表中所有行(包括当前行)的余额。余额分配给实际表中的当前行。该查询假设tbl表有一个名为“id”的主键列。

您可以首先更改该表以添加列,例如

ALTER TABLE TableName
ADD Bal DECIMAL(40,2);
在表中创建列后,可以使用update语句用数据更新它

UPDATE TableName set Bal=(deposited_amount - issued_amount);

为此,您应该使用SP。在这种情况下,使用光标处理每一行,因为流动余额取决于当前行存款,并检查已发行金额以及前一行的流动余额。这不是一个罕见的问题,所以请尝试用谷歌搜索您的问题。这是错误的。运行余额取决于上一笔交易。这是怎么回事?他确实需要一个平衡。查看所需结果的第二行。如上所述,使用普通sql无法计算运行平衡。最好使用存储过程或编程语言。在MySQL中,可以使用临时表计算运行平衡。我已经更新了答案这不是一个持续的平衡。
UPDATE TableName set Bal=(deposited_amount - issued_amount);