MYSQL如何查询当前余额作为以前的余额

时间:2019-11-13 08:46:39

标签: mysql

我需要使用以下预期结果进行查询。考虑上一个。余额是自动计算的字段。我想通过使用Balance(来自上一行)来查看MYSQL查询。如何使用mysql查询出来?日期可以是任何不连续的日期,下面仅是示例。

请注意,以前的余额只是旧余额的序列。这意味着第一个先前的余额始终为null或零,并且余额从添加的金额中获取其金额。从第一个余额开始,第二个记录开始具有先前的余额,并且持续不断

enter image description here

3 个答案:

答案 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