Чтобы найти непрерывные периоды, вы можете использовать Табибитозийский метод .Затем используйте аналитические 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 ))
демо
Я предположил, что датынепрерывны, если нет, то сначала используйте нумерацию строк.