Не уверен, что я полностью понял ваш вопрос, но вы, возможно, сможете этого добиться, используя предложение windowing для функции analyti c.
Я создал образец таблицы number_list
со значениями, которые вы ' д при условии. Предполагая, что (2) будет выводом из нижеследующего запроса ..
SQL> select * from number_list;
VALUE
----------
100
300
1000
400
500
600
6 rows selected.
.. теперь вам нужен первый список чисел, сумма которых попадает в определенный диапазон, т.е. (1000 - 300) и (1000 + 300). ) ..
SQL> with sorted_list as
2 (
3 select rownum rnum, value from
4 ( select value from number_list order by value ) -- sort values ascending
5 )
6 select value from sorted_list where rnum <= (
7 select min(rnum) from ( -- determine first value from sorted list to fall in the specified range
8 select rownum rnum, value,
9 sum(value) over ( order by null
10 rows between
11 unbounded preceding -- indicate that the window starts at the first row
12 and current row -- indicate that the window ends at the current row
13 ) sum
14 from sorted_list
15 ) where sum between (1000-300) and (1000+300)
16 );
VALUE
----------
100
300
400