сумма с указанным c условием в select - PullRequest
1 голос
/ 12 февраля 2020

У меня есть номер, например: 1000 (1)

У меня есть запрос, который возвращает другой номер без какого-либо заказа (2). например: 100 300 000 000 400 500 600

Я хочу написать запрос (не все oop), в котором мои числа в (2) суммируются, пока сумма не окажется в диапазоне (1000-300, 1000+) 300) -> (700,1300)

например: 100 + 300 + 400 может быть ответом или 400 + 500 или ...

PS: первый порядок чисел, который в этом диапазоне ответ.

1 Ответ

2 голосов
/ 13 февраля 2020

Не уверен, что я полностью понял ваш вопрос, но вы, возможно, сможете этого добиться, используя предложение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...