Дано:
name | value | a | 1 | b | 1 | c | 2 | d | 2 | e | 5 | f | 6 | g | 9 | h | 12 |
|
Нужно для каждой строки вычилить количетсво строк, следующих за ней (текущая строка тоже учитывается), и в которых value отличается от value текущей строки не больше, чем на 1.
value не убывает.
name | value | desired_result | a | 1 | 4 | b | 1 | 3 | c | 2 | 2 | d | 2 | 1 | e | 5 | 2 | f | 6 | 1 | g | 9 | 1 | h | 12 | 1 |
|
Т.е. 3 для b получается потому, что за строкой b следуют ровно 2 строки, в которых value отличается от value для b не больше чем на 1.
Решать можно, например, для Oracle 9.
with t as (
select 'a' name, 1 value, 4 result from dual union all
select 'b' name, 1 value, 3 result from dual union all
select 'c' name, 2 value, 2 result from dual union all
select 'd' name, 2 value, 1 result from dual union all
select 'e' name, 5 value, 2 result from dual union all
select 'f' name, 6 value, 1 result from dual union all
select 'g' name, 9 value, 1 result from dual union all
select 'h' name, 12 value, 1 result from dual
)
select t.* from t