如何从之前的值中减去该值

问题描述 投票:0回答:1

我有一张这样的桌子:

------------------------------
|     DT     |  PRIN  |  INT |
------------------------------
| 01-01-2023 | 100000 | 1100 |
| 01-02-2023 | 100000 | 1200 |
| 01-03-2023 | 100000 | 1500 |
| 01-04-2023 | 100000 | 2300 |
------------------------------

我需要减去 PRIN 和 INT 列,并在第一行中得到减去的金额。
在第二行,我需要从第一行的结果中减去 INT。

结果应该是这样的:

--------------------------------------
|     DT     |  PRIN  |  INT |  BAL  |
--------------------------------------
| 01-01-2023 | 100000 | 1100 | 98900 |
| 01-02-2023 | 100000 | 1200 | 97700 |
| 01-03-2023 | 100000 | 1500 | 96200 |
| 01-04-2023 | 100000 | 2300 | 93900 |
--------------------------------------

我尝试过使用 LEAD 和 LAG 功能,但无法正确获得减法,这应该在 SQL 中完成。

这是脚本:

create table tbl9 ( dt date, prin varchar2(20), int varchar2(20));
insert into tbl9 values(to_date('01-01-2023','dd-mm-yyyy'),100000, 1100);
insert into tbl9 values(to_date('01-02-2023','dd-mm-yyyy'),100000, 1200);
insert into tbl9 values(to_date('01-03-2023','dd-mm-yyyy'),100000, 1500);
insert into tbl9 values(to_date('01-04-2023','dd-mm-yyyy'),100000, 2300);
commit;
sql oracle window-functions oracle21c
1个回答
0
投票

您可以使用窗口函数

SUM()
来实现

SELECT dt,prin, int, prin - SUM(int) OVER(PARTITION BY prin ORDER BY dt) bal
FROM tbl9
DT 普林 INT 巴尔
23 年 1 月 1 日 100000 1100 98900
23 年 2 月 1 日 100000 1200 97700
23 年 3 月 1 日 100000 1500 96200
23 年 4 月 1 日 100000 2300 93900

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.