Нахождение дат, которые имеют пересечение друг с другом
В таблице есть один столбец с датами. Я хочу написать такой запрос, который выведет, скажем, те даты, которые отличаются друг от друга в промежутке одного часа.
date
-----------------
2021-05-17 15:00:00
2021-05-17 16:00:00
2021-05-17 16:30:00
2021-05-17 19:00:00
Необходимый результат
date
-----------------
2021-05-17 15:00:00
2021-05-17 16:00:00
2021-05-17 16:30:00
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Для каждой записи тупо проверяем, что в диапазоне плюс-минус час есть ещё хотя бы одна запись.
SELECT date
FROM table t1
WHERE EXISTS ( SELECT NULL
FROM table t2
WHERE t2.date BETWEEN DATEADD(HOUR, -1, t1.date)
AND DATEADD(HOUR, 1, t1.date)
AND t2.date != t1.date )
PS. Не работает, если есть две записи с в точности совпадающим значением даты-времени. В этом случае следует использовать сравнение уникальных выражений (например, первичного ключа) вместо t2.date != t1.date.