首页 > 解决方案 > 快速包含另一种类型的先前值

问题描述

我有一个以下结构的表:

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应包含最后看到OrdinalType = A,其中最后是相对于 的顺序的Ordinal。在另一个 A 行之前可能有任意数量的 B 行。有没有一种高效的方法来实现这个结果?使用游标可以轻松实现所需的结果,但由于我使用的行数很大,所以不可行。

标签: sqltsql

解决方案


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

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

推荐阅读