У меня есть ежедневные даты в каждой строке, с началом и концом, и если они применимы для этого запроса. Мне нужно вернуть все интервалы дней, когда нет разрыва.
Пример таблицы:
+----+---------------------+---------------------+--------+--------------------------------------+
| ID | DATE_START | DATE_END | STATUS | COMMENT |
|----+---------------------+---------------------+--------+--------------------------------------+
| 1 | 2019-01-01 00:00:00 | 2019-01-02 00:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+
| 2 | 2019-01-02 00:00:00 | 2019-01-03 00:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+|
| | | | | <-- did this gap visually, following |
| | | | | <-- dates are more than 1 day off |
|----+---------------------+---------------------+--------+--------------------------------------+
| 10 | 2019-02-07 06:00:00 | 2019-02-08 06:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+
| 11 | 2019-02-08 06:00:00 | 2019-02-09 06:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+
| 12 | 2019-02-09 06:00:00 | 2019-02-10 06:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+
| 13 | 2019-02-10 06:00:00 | 2019-02-11 06:00:00 | 0 | <-- gap, as STATUS=0 |
|----+---------------------+---------------------+--------+--------------------------------------+
| 14 | 2019-02-11 06:00:00 | 2019-02-12 06:00:00 | 1 | |
|----+---------------------+---------------------+--------+--------------------------------------+
Таблица результатов должна выглядеть так:
+---------------------+---------------------+----------+
| INTERVAL_START | INTERVAL_END | IDS |
+---------------------+---------------------+----------+
| 2019-01-01 00:00:00 | 2019-01-03 00:00:00 | 1,2 |
+---------------------+---------------------+----------+
| 2019-02-07 06:00:00 | 2019-02-10 06:00:00 | 10,11,12 |
+---------------------+---------------------+----------+
| 2019-02-11 06:00:00 | 2019-02-12 06:00:00 | 14 |
+---------------------+---------------------+----------+
Хорошо, выбор, если STATUS<>0
в порядке. С чем я борюсь, так это то, что я понятия не имею о том, как мне начинать оживление, если также доступен следующий день, и если так, продолжайте, пока не будет следующего дня (и также не соберите идентификаторы этих дней).
Поскольку этот запрос будет содержать огромное количество других данных, это вовсе не проблема. Я просто не могу обернуть голову вокруг этого рекурсивного материала.
Было бы очень полезно, если бы это был настолько стандартный SQL, насколько это возможно, так как этот запрос может быть перенесен в будущем.
РЕДАКТИРОВАТЬ: О, как вы видите там отметки времени, DATE_START
всегда совпадает с часом / минутой, как DATE_END
с предыдущего дня (если существует).