繁体   English   中英

MySQL 中计算借方和贷方余额的问题

[英]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


我的子查询实际上做的是:它为表中的所有条目计算它,并只显示 cust_id=1。 这才是真正的问题。 它必须只计算选定行的余额。 它实际上计算所有行并向我显示该结果中的行。 下面的截图解释了它

当我为 Cust_id 设置条件时,这实际上是我的查询

如果您想要每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM