LAG(SUM(amount))无法按预期工作,因为SUM(amounts)是一个聚合函数,而LAG()对单个行进行操作。
相反,您应该使用LAG(final_balance)OVER(…)来获取前几行的累积总和。
CREATE TABLE employee_settlement ( employee_id int, amount int, created_at date);
insert into employee_settlement values(1,950,'2024-12-01');
insert into employee_settlement values(1,1000,'2025-01-01');
insert into employee_settlement values(1,1050,'2025-02-01');
实际查询:
WITH balance_cte AS (
SELECT
employee_id,
created_at,
amount AS change,
SUM(amount) OVER (PARTITION BY employee_id ORDER BY created_at) AS final_balance
FROM employee_settlement
WHERE employee_id = 1 -- Replace with a specific employee_id
)
SELECT
employee_id,
COALESCE(LAG(final_balance) OVER (PARTITION BY employee_id ORDER BY created_at), 0) AS start_balance,
change,
final_balance
FROM balance_cte
ORDER BY created_at;
输出: