我需要使用以下预期结果进行查询。考虑上一个。余额是自动计算的字段。我想通过使用Balance(来自上一行)来查看MYSQL查询。如何使用mysql查询出来?日期可以是任何不连续的日期,下面仅是示例。
请注意,以前的余额只是旧余额的序列。这意味着第一个先前的余额始终为null或零,并且余额从添加的金额中获取其金额。从第一个余额开始,第二个记录开始具有先前的余额,并且持续不断
答案 0 :(得分:0)
您可以将row_number()
用于left join
的{{1}}。
previous balance
答案 1 :(得分:0)
如果您只想从当前余额中计算以前的余额,那么减去就可以了:
select
date,
balance - added_amount prev_balance,
added_amount,
balance
from mytable
注意:您提到balance
是某种计算列。请注意,如果您正在运行MySL 8.0,则可以使用窗口函数同时计算余额和上一余额:
select
date,
coalesce(
sum(added_amount) over(
order by date
rows between unbounded preceding and 1 preceding
),
0) prev_balance,
added_amount,
sum(added_amount) over(order by date) balance
from mytable
这比在表本身中存储值更加灵活。
答案 2 :(得分:0)
我觉得我想得太过分了...。回首查询非常简单之后,只是一开始很难理解这个想法。该查询将解决问题并计算余额和以前的余额。它称为运行余额/累积余额。这个想法是内部查询将首先计算先前的余额...一旦获得先前的余额,然后使用它来在外部查询中计算余额
SELECT
t2.date,
t2.added_amount,
t2.previous_balance
t2.previous_balance + t2.added_amount AS balance
FROM
(Select
t.date,
t.added_amount,
(SELECT sum(t1.added_amount) FROM table t1
WHERE t1.date < t.date) as previous_balance
FROM table t
ORDER BY t.date) t2
ORDER BY t2.date