首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅生成负日差值的MySQL查询

问仅生成负日差值的MySQL查询
EN

Stack Overflow用户
提问于 2019-02-02 20:48:37
回答 2查看 42关注 0票数 1

我正在学习mysql,并且很难理解更复杂的输出--主要是逻辑部分……我有一个简单的数据库,其中包含2个表与1个连接-设计在这里https://prnt.sc/mfmwji

我需要创建一个报告,只显示负余额的每日状态(所以只有当人处于负平衡)在过去的6个月。

我已经将查询放在一起,当它们为负时才显示差异,但它不会将它们‘连接’到它们之前的行……可以这么说,只是展示了撤退。我玩过query,但这是我想出的最好的东西……我试着用sum函数包装差值,但这只是求和,并不返回每日差值。

代码语言:javascript
复制
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

我曾尝试检查其他问题,但它们通常指向其他问题,而不是针对我的问题。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-02 22:58:04

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-02-02 21:08:00

这就是你所要求的。它显示了一个用户的报告。我不知道是否有一种方法可以同时为所有用户做这件事。也许它可以帮助你找到你想要的东西。

代码语言:javascript
复制
SELECT
    PreAgg.name,
    (PreAgg.withdraw - PreAgg.deposit) AS Difference,
    @PrevBal := @PrevBal + (PreAgg.withdraw - PreAgg.deposit) AS Balance
FROM
    (SELECT
        T1.name,
        T2.deposit,
        T2.withdraw,
        (T2.withdraw - T2.deposit) AS Difference,
        T1.id
     FROM
        users AS T1
     INNER JOIN transactions AS T2
     ON
        T1.id = T2.user_id
     ORDER BY
        T2.id ) AS PreAgg,
       (SELECT @PrevBal := 0) as InitialVar
WHERE PreAgg.id = 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54493235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档