【发布时间】:2023-01-12 01:13:34
【问题描述】:
我正在尝试找到一种方法来计算帐户的运行余额。 以下是我的架构和我尝试过的查询。
CREATE TABLE transactions(
id INTEGER NOT NULL PRIMARY KEY
,date DATE NOT NULL
,dr INTEGER NOT NULL
,cr INTEGER NOT NULL
,amt INTEGER NOT NULL
);
CREATE TABLE accounts(
id INTEGER NOT NULL PRIMARY KEY
,name VARCHAR(55) DEFAULT NULL
);
INSERT INTO accounts(id,name) VALUES (1,'C1');
INSERT INTO accounts(id,name) VALUES (2,'C2');
INSERT INTO transactions(id,date,dr,cr,amt) VALUES (1,'2020-01-01',1,2,100);
INSERT INTO transactions(id,date,dr,cr,amt) VALUES (2,'2020-01-01',1,2,200);
SELECT
acc.id,
acc.name,
tx.date,
SUM(tx.amt) OVER (PARTITION BY tx.date ORDER BY tx.date desc) as balance
FROM
accounts acc
LEFT JOIN transactions tx ON tx.dr = acc.id;
| id | name | date | balance |
|---|---|---|---|
| 2 | C2 | ||
| 1 | C1 | 2020-01-01 | 300 |
| 1 | C1 | 2020-01-01 | 300 |
考虑到借方和贷方帐户,尝试得出如下所示的输出。
| id | name | date | balance |
|---|---|---|---|
| 1 | C1 | 2020-01-01 | 300 |
| 2 | C2 | 2020-01-01 | -300 |
【问题讨论】:
-
这是您需要分组依据而不是 sum()..over 的预期行为
-
-300 来自哪里?
-
好吧,这就是我想要实现的输出。问题更新得更清楚了。