У меня проблемы с отображением последовательных выходных из существующего набора данных в Oracle SQL.Например, в декабре 2017 года между 20 и 30 числами будут следующие выходные (потому что Рождество и выходные дни):
- 23.12.2017 суббота
- 24.12.2017 воскресенье
- 25.12.2017 Рождество
- 30.12.2017 суббота
Теперь я хочу, чтобы мой набор данных результатов выглядел следующим образом (необходим RUNTOT):
DAT ISOFF RUNTOT
20.12.2017 0 0
21.12.2017 0 0
22.12.2017 0 0
23.12.2017 1 1
24.12.2017 1 2
25.12.2017 1 3
26.12.2017 0 0
27.12.2017 0 0
28.12.2017 0 0
29.12.2017 0 0
30.12.2017 1 1
Это означает, что при изменении «ISOFF» я хочу посчитать (или суммировать) последовательные строки, где «ISOFF» равен 1.
Я попытался найти решение с аналитической функцией, где я суммирую «ISOFF»."к текущей строке.
SELECT DAT,
ISOFF,
SUM (ISOFF)
OVER (ORDER BY DAT ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS RUNTOT
FROM (TIME_DATASET)
WHERE DAT BETWEEN DATE '2017-12-20' AND DATE '2017-12-27'
ORDER BY 1
Теперь я получаю следующий набор данных:
DAT ISOFF RUNTOT
20.12.2017 0 0
21.12.2017 0 0
22.12.2017 0 0
23.12.2017 1 1
24.12.2017 1 2
25.12.2017 1 3
26.12.2017 0 3
27.12.2017 0 3
28.12.2017 0 3
29.12.2017 0 3
30.12.2017 1 4
Как я могу сбросить промежуточный итог, если ISOFF изменится на 0?Или это неправильный подход к решению этой проблемы?
Спасибо за помощь!