sql - 在同一列中计算 1 之间的零
问题描述
我有这样的数据。
ID IND
1 0
2 0
3 1
4 0
5 1
6 0
7 0
我想在值 1 之前计算零。这样,输出将如下所示。
ID IND OUT
1 0 0
2 0 0
3 1 2
4 0 0
5 1 1
6 0 0
7 0 2
没有pl/sql可以吗?我试图找到行号之间的差异,但无法实现。
解决方案
Oracle 12.1 中引入的该match_recognize
子句可以快速解决此类“行模式识别”问题。由于对 ID = 0 的“最后一行”进行了特殊处理,该解决方案有点复杂,但除此之外它很简单。
像往常一样,该with
子句不是解决方案的一部分;我包括它来测试查询。删除它并使用您的实际表名和列名。
with
inputs (id, ind) as (
select 1, 0 from dual union all
select 2, 0 from dual union all
select 3, 1 from dual union all
select 4, 0 from dual union all
select 5, 1 from dual union all
select 6, 0 from dual union all
select 7, 0 from dual
)
select id, ind, out
from inputs
match_recognize(
order by id
measures case classifier() when 'Z' then 0
when 'O' then count(*) - 1
else count(*) end as out
all rows per match
pattern ( Z* ( O | X ) )
define Z as ind = 0, O as ind != 0
);
ID IND OUT
---------- ---------- ----------
1 0 0
2 0 0
3 1 2
4 0 0
5 1 1
6 0 0
7 0 2
推荐阅读
- reactjs - 有没有人遇到过这个错误:Uncaught TypeError: Cannot read property 'createPaymentMethod' of undefined
- linux - Setcap 不适用于自定义发行版上的原始套接字
- pandas-groupby - 表有几列具有相同类型的信息
- excel - 表刷新vba excel从另一个程序调用程序错误代码1004
- chatbot - 来自目标中机器人的初始化消息
- javascript - JS if 函数内的语句
- python - scipy 最小化 TypeError: 不支持的操作数类型 -: 'tuple' 和 'tuple'
- python - 如果包含联合,list_filters 不适用于管理员 list_view 中重新定义的 get_queryset
- java - 使用由 TestNG 运行的数据集创建测试用例
- css - 如何修复由 sass / scss 引起的 css stylelint 错误?