php - MySQL 查询仅生成负的每日差异
问题描述
我正在学习 mysql,并且很难理解更复杂的输出 - 主要是逻辑部分......我有一个简单的数据库,其中包含 2 个表和 1 个连接 - 设计在这里https://prnt.sc/mfmwji
我需要创建一个报告,显示过去 6 个月内仅负状态的每日余额(因此只有当人处于负余额时)。
我已经将查询放在一起,仅在它们为负数时显示差异,但它不会将它们“连接”到它们之前的行......只能显示撤回可以这么说。我玩过查询,但这是我想出的“最好”的东西......我试图用 sum 函数来包装差异,但这只是总结了整个事情并且不会返回每日差异。
SELECT
T1.name AS Name,
T2.withdraw - T2.deposit AS Difference,
DATE_FORMAT(T2.date, '%Y-%m-%d') AS Date
FROM
users AS T1
INNER JOIN transactions AS T2
ON
T1.id = T2.user_id
WHERE
(T2.withdraw - T2.deposit) > 0
查询返回这个输出(它只是结果的一部分,因为我得到了 100 个结果) http://prntscr.com/mfn0xf
珍珠尚普林的存款和取款,所以你明白了: http ://prntscr.com/mfn15a
我试图检查关于 SO 的其他问题,但它们通常指向其他问题并且不是针对我的问题。
提前感谢您认为我应该查看的任何信息!
解决方案
您可以使用子查询来检索最新的余额。然后,在外部查询中,您可以过滤余额为负的位置:
select *
from (
select u.name,
t.date,
t.deposit - t.withdraw action,
( select sum(deposit - withdraw)
from transactions
where user_id = u.id
and date <= t.date ) as balance
from users as u
inner join transactions as t
on u.id = t.user_id
) balances
where balance < 0
order by 1, 2
推荐阅读
- java - 为什么 Docker 中的 Gerrit 找不到 JAVA_HOME?
- c# - c# 异常处理(将所有内容放在一起,以不同的方法对它们进行排序)
- python - 如何按索引位置过滤掉熊猫数据框中间的一行
- c# - 客户无法使用 smptClient 通过预订表格向我发送电子邮件
- laravel - 检查用户今天是否已通过身份验证
- spring-cloud - 具有 Azure 事件中心限制的 Spring Cloud Data Flow?
- database - Clickhouse - 是否可以在 1 个命令中更改集群中的表
- python - 我如何获得打印声明来告诉我作者的死亡日期?
- hyperledger-fabric - 带有 CA 服务器的 Hyperledger Fabric NodeOU 验证引导程序块失败。MSP 管理器失败
- javascript - JavaScript 函数无法按预期工作