我有一张这样的桌子:
------------------------------
| 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;
您可以使用窗口函数
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 |