MySQL中会计数据的期末余额转期初余额

pdkcd3nj  于 2023-05-28  发布在  Mysql
关注(0)|答案(2)|浏览(189)

我有一组会计数据,我需要使用MySQL查询,但我不知道如何将一个月的期末余额转换为下个月的期初余额。
下面是一个例子:2020年4月,账户101的期末余额为200美元。我希望这200美元是2020年5月同一个账户(101)的起始余额。
我已经在网上搜索了解决方案,但他们都假设你正在使用当前日期,这对我不起作用。有人能帮我吗?我真的很感激!
该表目前看起来如下所示:
| 日期|账户|姓名|余额|
| - -----|- -----|- -----|- -----|
| 2020年4月30日|一百零一|机器|两百块|
| 2020年5月30日|一百零一|机器|三百块|
| 2020年6月30日|一百零一|机器|四百块|
| 2020年7月30日|一百零一|机器|五百块|
预期输出:
| 日期|账户|姓名|期初余额|期末余额|
| - -----|- -----|- -----|- -----|- -----|
| 2020年4月30日|一百零一|机器|零|两百块|
| 2020年5月30日|一百零一|机器|两百块|三百块|
| 2020年6月30日|一百零一|机器|三百块|四百块|
| 2020年7月30日|一百零一|机器|四百块|五百块|

  • 请注意,该表过于简化。有数百个账户,每天有多笔交易的交易。

到目前为止,我所做的只是在 Jmeter 板方面,所以相当乏味。如果可以通过SQL来实现,那将使它变得简单得多。

dwbf0jvd

dwbf0jvd1#

正如@GMB在评论中提到的,您可以使用窗口函数lag()来检索当前行之前的行:

ALTER TABLE mytable ADD COLUMN beginning_Balance int;

UPDATE mytable t
INNER JOIN (
  select id, LAG(ending_Balance) OVER(PARTITION BY account ORDER BY date) as beginning_Balance
  FROM mytable
) as s ON s.id = t.id
SET t.beginning_Balance = s.beginning_Balance

Demo here

vfwfrxfs

vfwfrxfs2#

使用INSERT INTO ... SELECT,其中SELECT查询只是将4月份的期末余额复制到5月份。

INSERT INTO yourTable (date, account, name, beginning_balance, ending_balance)
SELECT '30 May 2020', account, name, ending_balance, NULL
FROM yourTable
WHERE date = '30 April 2020'

相关问题