我有一个具有以下结构的表:
Ordinal Type
1 A
2 B
3 A
4 B
5 B
6 B
7 A
根据顺序事项有两种类型和顺序。我想要以下结果:
Ordinal Type Last_A
1 A 1
2 B 1
3 A 3
4 B 3
5 B 3
6 B 3
7 A 7
新列Last_A
应当包含Ordinal
的最后一次查看的Type = A
,其中最后一个相对于Ordinal
的顺序。在另一个A行之前可能有任意数量的B行。是否有一种高效的方法来实现这一结果?使用游标可以轻松实现所需的结果,但是由于我处理的行数很多,因此不可行。
答案 0 :(得分:2)
您可以使用条件累积max()
:
select t.*,
max(case when t.type = 'A' then ordinal end) over (order by ordinal) as last_A
from t;