mysql - 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。那是实际的问题。它必须只计算选定行的余额。它实际上计算所有行并向我显示该结果中的行。下面的截图解释了它
解决方案
如果你想要一个 per TR_CUST_ID
-balance,那么你需要在子查询中的那个列上包含一个相关子句:
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 中完全有效的文字日期。
推荐阅读
- react-native - 在 React Native 中插入数据到状态
- python - 使用python打开链接后如何下载pdf(不使用selenium)
- haskell - “无法加载包‘regex-posix’……未知符号‘regerror’”
- android-studio - 如何使用一个按钮更改多个 recyclerView 项目的背景颜色?
- flutter - 如何使用 Dissmissable 从 itembuilder 中删除项目并且该项目来自 Firestore?
- node.js - JWT 撤销刷新令牌
- amazon-web-services - 使用 CloudWatch 事件:如何将 JSON 对象作为环境变量传递给 CodeBuild
- r - 如何合并匹配的数据并仍然在R中显示不匹配的数据
- python - 在 Gridsearchcv sklearn 中使用不同的评分指标时出现问题
- php - payu支付网关重定向后PHP会话自动被破坏