SQL 在同一行上迭代

SQL iterating on same row

我正在寻找 SQL 代码来执行此操作:

tab_input

ID Dat A
a 7 3
a 6 4
a 5 1
b 2 5
b 3 9
b 1 2

我想计算一个新的列B[i] = A[i] + B[i-1],但是当ID改变时字段B被重置

tab_output

ID Dat A B
a 5 1 1
a 6 4 5
a 7 3 8
b 1 2 2
b 2 5 7
b 3 9 16

我尝试了以下方法:

select 
       A
     , A + lag( B, 1) OVER( partition by id order by  dat ) as B 
FROM(
    select 
        ID, A, 0 as B
    FROM tab_input
    ) as base
;

但是不行,结果是

ID Dat A B
a 5 1 1
a 6 4 4
a 7 3 3
b 1 2 2
b 2 5 5
b 3 9 9

我认为它是把0的值加到所有的值上,并没有更新B的值

非常感谢你的帮助!

LAG 查看一行(默认为当前行之前的一行)。你为每一行创建一个为 0 的 B,然后你查看 LAG(b),但 b 在前一行中也为 0;它在所有行中都是 0。您期望一些递归开始,但事实并非如此。

你要找的是一个累计数(SUM OVER):

SELECT id, dat, a, SUM(a) OVER (PARTITION BY id ORDER BY dat) AS b
FROM tab_input
ORDER BY id, dat;