sql - 快速包含另一种类型的先前值
问题描述
我有一个以下结构的表:
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 行。有没有一种高效的方法来实现这个结果?使用游标可以轻松实现所需的结果,但由于我使用的行数很大,所以不可行。
解决方案
您可以使用条件累积max()
:
select t.*,
max(case when t.type = 'A' then ordinal end) over (order by ordinal) as last_A
from t;
推荐阅读
- javascript - 无法访问对象函数内的对象键?
- java - 尝试在导致崩溃的空对象引用上调用虚拟方法
- html - 为什么我的网站突然打不开了?
- python - 将包含 unicode 数据的 bytearray 转换为 str
- javascript - 如何理解这个 JavaScript 函数的流程
- excel - 如何从单元格中的字符串中识别和删除单个字母?
- react-native - 我怎样才能随时待命?
- node.js - 如果查询为空,如何返回 MongoDb 中存在的所有记录?
- swift - Swift如何在页面加载之前从firebase获取数据
- r - 选择对象和选择对象 [,] 有区别吗?