поиск строк по суммированным значениям конкретных идентификаторов в sql - PullRequest
0 голосов
/ 30 июня 2018

У меня есть таблица, как показано ниже -

Id| Amount|DateAdded  |
--|-------|-----------|
1   20     20-Jun-2018
1   10     05-Jun-2018
1   4      21-May-2018
1   5      15-May-2018
1   15     05-May-2018
2   25     15-Jun-2018
2   25     12-Jun-2018
2   65     05-Jun-2018
2   65     20-May-2018

Здесь. Если я суммирую сумму Id = 1, я получу 54 в качестве суммы результата. Я хочу найти те строки с Id = 1, чья сумма не превышает точное 35 или любое заданное значение

В случае заданного значения 35 ожидаемый результат для id = 1 должен быть -

    Id| Amount|DateAdded  |
    --|-------|-----------|
    1   20     20-Jun-2018
    1   10     05-Jun-2018
    1   4      21-May-2018
    1   5      15-May-2018

В случае заданного значения 50 ожидаемый результат для Id = 2 должен быть -

  Id| Amount|DateAdded  |
  --|-------|-----------|
   2   25     15-Jun-2018
   2   25     12-Jun-2018

1 Ответ

0 голосов
/ 30 июня 2018

Вы бы использовали совокупную сумму. Чтобы получить все строки:

select t.*
from (select t.*,
             sum(amount) over (partition by id order by dateadded) as running_amount
      from t
     ) t
where t.running_amount - amount < 35;

Чтобы получить только строку, которая проходит отметку:

where t.running_amount - amount < 35 and
      t.running_amount >= 35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...