【发布时间】:2022-12-07 13:41:50
【问题描述】:
我正在尝试创建一个 SQLite 触发器来更新特定帐户 code 的 balance。
accounts表:
CREATE TABLE accounts (
year INTEGER NOT NULL,
month INTEGER NOT NULL CHECK(month BETWEEN 1 AND 12),
amount REAL NOT NULL CHECK(amount >= 0),
balance REAL,
code INTEGER NOT NULL
);
插入新行时,我希望新行的 balance 值反映 OLD balance + NEW amount。但是这个触发器无法识别滞后的 balance 值,我不明白为什么:
CREATE TRIGGER trg_accounts_balance
AFTER INSERT ON accounts
BEGIN
UPDATE accounts
SET balance = (
SELECT
lag(balance, 1, 0) OVER (
PARTITION BY code
ORDER BY month
) + NEW.amount
FROM accounts
)
WHERE rowid = NEW.ROWID;
END;
如果我每月插入一行,我希望我的数据如下所示:
| year | month | amount | balance | code |
|---|---|---|---|---|
| 2022 | 1 | 100.0 | 100.0 | 100 |
| 2022 | 2 | 9.99 | 109.99 | 100 |
但我得到:
| year | month | amount | balance | code |
|---|---|---|---|---|
| 2022 | 1 | 100.0 | 100.0 | 100 |
| 2022 | 2 | 9.99 | 9.99 | 100 |
我究竟做错了什么?
【问题讨论】:
标签: sqlite triggers sql-update sql-insert window-functions