如何在sql server中获取上一行数据

Kri*_*hna 3 sql t-sql sql-server

我想从前一行获取数据。我使用了 LAG 功能,但没有得到预期的结果。

桌子:-

col1  col2  col3
ABCD    1   Y
ABCD    2   N
ABCD    3   N
EFGH    4   N
EFGH    5   Y
EFGH    6   N
XXXX    7   Y
Run Code Online (Sandbox Code Playgroud)

预期结果

col1 col2 col3  col4
ABCD    1   A   NULL
ABCD    2   B   A
ABCD    3   C   B
EFGH    4   A   NULL
EFGH    5   B   A
EFGH    6   E   B
XXXX    7   F   NULL
Run Code Online (Sandbox Code Playgroud)

Col4 应保存按 Col1 中的值分组的前一行的数据。请让我知道如何实现这一目标。

Yog*_*rma 5

使用lag()功能

select *, lag(col3) over (partition by col1 order by col2) as col4
from table t;
Run Code Online (Sandbox Code Playgroud)

但是,subquery如果您SQL没有,您也可以使用LAG()

select *,   
        (select top 1 col3
         from table
         where col1 = t.col1 and col2 < t.col2
         order by col2 desc
        ) as col4
from table t;
Run Code Online (Sandbox Code Playgroud)