Count Max количество дней непрерывного овердрафта - PullRequest
0 голосов
/ 05 июля 2019
Date  | Account |  Amount   | Count max number of day continuous < 0     |
  1   |   1001  | 100        | 0   |
  2   |   1001  | -100       | 1   |
  3   |   1001  | -100       | 2   |
  4   |   1001  | 100        | 2   |
  5   |   1001  | -100       | 2   |
  6   |   1001  | -100       | 2   |
  7   |   1001  | -100       | 3   |
  8   |   1001  | -100       | 4   |
  9   |   1001  | 100        | 4   |

У меня есть пример данных. Я хочу иметь столбец "Подсчитать максимальное количество дней непрерывной <0". Как я могу выбрать его в базе данных оракула </p>

1 Ответ

0 голосов
/ 05 июля 2019

Чтобы найти непрерывные периоды, вы можете использовать Табибитозийский метод .Затем используйте аналитические count и, наконец, max:

select date_, account, amount, 
       max(cnt) over (partition by account order by date_) max_overdraft_period
  from (
    select date_, account, amount, 
           count(case when amount <= 0 then 1 end) 
                 over (partition by account, grp order by date_) cnt
      from (
        select date_, account, amount, 
               date_ - sum(case when amount <= 0 then 1 else 0 end) 
                           over (partition by account order by date_) grp
          from t ))

демо

Я предположил, что датынепрерывны, если нет, то сначала используйте нумерацию строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...