首页 > 解决方案 > 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 的其他问题,但它们通常指向其他问题并且不是针对我的问题。

提前感谢您认为我应该查看的任何信息!

标签: phpmysqllogic

解决方案


您可以使用子查询来检索最新的余额。然后,在外部查询中,您可以过滤余额为负的位置:

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

推荐阅读