[英]Issue in calculating balance from debit and credit in MySQL
我正在使用 MySQL v5.7 我需要计算借方和贷方列中的运行余额。 提及查询工作得很好但是当我在 where 条件下限制行时它显示错误的值。 实际上它会计算所有行的总和,然后显示所需行的结果,但在这种情况下所需的余额会减少。 这是我获取所有行时有效的查询。
SELECT
vch.TR_ID,
vch.TR_CUST_ID,
vch.TR_DEBIT Debit,
vch.TR_CREDIT Credit,
COALESCE ((SELECT SUM(TR_CREDIT) - SUM(TR_DEBIT) FROM all_trans vch2 WHERE vch2.TR_ID <= vch.TR_ID ),0 ) AS Balance,
vch.TR_DATETIME DateTime
FROM `falcondb`.`all_trans` vch
WHERE
vch.TR_DATETIME BETWEEN
STR_TO_DATE('2020-07-24 11:19:18','%Y-%m-%d %H:%i:%s')AND
STR_TO_DATE('2020-10-24 11:19:18','%Y-%m-%d %H:%i:%s')
ORDER BY vch.TR_ID;
这是具有 CUST_ID 的事务表,我的主键是 TR_ID 我还有一些其他附加表将与此连接,但在这里它们并不重要。 这就是为什么我没有在这里展示是为了让你们简单。 附上两种情况的屏幕截图。
我的子查询实际上做的是:它为表中的所有条目计算它,并只显示 cust_id=1。 这才是真正的问题。 它必须只计算选定行的余额。 它实际上计算所有行并向我显示该结果中的行。 下面的截图解释了它
如果您想要每个TR_CUST_ID
余额,那么您需要在子查询的该列上包含一个相关子句:
SELECT
vch.TR_ID,
vch.TR_CUST_ID,
vch.TR_DEBIT Debit,
vch.TR_CREDIT Credit,
COALESCE (
(
SELECT SUM(TR_CREDIT) - SUM(TR_DEBIT)
FROM all_trans vch2
WHERE vch2.TR_ID <= vch.TR_ID AND vch2.TR_CUST_ID = vch.TR_CUST_ID
), --^-- here
0
) AS Balance,
vch.TR_DATETIME DateTime
FROM all_trans vch
WHERE
vch.TR_CUST_ID = 1
AND vch.TR_DATETIME BETWEEN '2020-07-24 11:19:18' AND '2020-10-24 11:19:18'
ORDER BY vch.TR_ID;
请注意,我删除了STR_TO_DATE()
表达式:不需要它们,因为您拥有的值已经是 MySQL 中完全有效的文字日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.