我正在学习mysql,并且很难理解更复杂的输出--主要是逻辑部分……我有一个简单的数据库,其中包含2个表与1个连接-设计在这里https://prnt.sc/mfmwji
我需要创建一个报告,只显示负余额的每日状态(所以只有当人处于负平衡)在过去的6个月。
我已经将查询放在一起,当它们为负时才显示差异,但它不会将它们‘连接’到它们之前的行……可以这么说,只是展示了撤退。我玩过query,但这是我想出的最好的东西……我试着用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
我曾尝试检查其他问题,但它们通常指向其他问题,而不是针对我的问题。
提前感谢您的任何信息,您认为我应该检查!
发布于 2019-02-02 22:58:04
您可以使用子查询来检索最新的余额。然后,在外部查询中,您可以过滤余额为负值的位置:
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发布于 2019-02-02 21:08:00
这就是你所要求的。它显示了一个用户的报告。我不知道是否有一种方法可以同时为所有用户做这件事。也许它可以帮助你找到你想要的东西。
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 = 1https://stackoverflow.com/questions/54493235
复制相似问题