快速包含其他类型的先前值

时间:2018-07-17 19:01:41

标签: sql tsql

我有一个具有以下结构的表:

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行。是否有一种高效的方法来实现这一结果?使用游标可以轻松实现所需的结果,但是由于我处理的行数很多,因此不可行。

1 个答案:

答案 0 :(得分:2)

您可以使用条件累积max()

select t.*,
       max(case when t.type = 'A' then ordinal end) over (order by ordinal) as last_A
from t;