Привет, товарищ StackOverflowers
Я действительно изо всех сил пытаюсь найти правильный подход для этой (на мой взгляд) относительно простой проблемы поиска пробелов.У меня есть таблица с почасовыми датами (почасовой файл журнала импортируется в БД).Мне нужно найти пропущенные часы в течение периода (скажем, в апреле).Итак, представьте, что в таблице БД есть следующие данные [import_logs]
[2018-04-02 10:00:000]
[2018-04-02 11:00:000]
[2018-04-02 12:00:000]
[2018-04-02 17:00:000]
Мне нужен результат для анализа разрыва в апреле:
[ GAP-BEGIN ] [ GAB_END ]
[2018-04-01 00:00:000] [2018-04-02 10:00:000] <-- problem
[2018-04-02 13:00:000] [2018-04-02 17:00:000] <-- can be found using below code
[2018-04-02 18:00:000] [2018-05-01 00:00:000] <-- problem
Моя проблема состоит в основном в поиске начала и концадиапазоны, но следующий код помогает найти ограничение между доступными данными.
WITH t AS (
SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY zone ORDER BY hourImported)
FROM logsImportedTable
Where hourImported > '2018-04-01' and hourImported < '2018-05-01' and zone = 1
)
SELECT t1.zone, t1.hourImported as GapStart, t2.hourImported as GapEnd
FROM t t1
INNER JOIN t t2 ON t2.zone = t1.zone AND t2.rn = t1.rn + 1
WHERE DATEDIFF(MINUTE, t1.hourImported, t2.hourImported) > 60
, который дает мне только результат:
[zone] [gap_start ] [gap_end ]
[1 ] [2018-04-02 13:00:00.000] [2018-04-02 17:00:00.000]
Так что, в основном, если журналы не были импортированы во времяАпрель, вообще, текущая реализация не показала бы отсутствующих данных вообще (что-то не так)
Я думаю, что мне нужно каким-то образом добавить несколько новых точек данных непосредственно перед началом и концом периода апреля, чтобы каким-то образом получить запроспоймать начало и конец месяца как отсутствующие данные?Что бы вы умные парни / девушки делали?
/ С уважением