Как вычислить пересечение дат для произвольного количества временных рядов в SQL без циклов?пересечение дат для произвольного числа временных рядов в SQL
Учитывая, что у меня есть таблица с 3 столбцами
- GroupID
- Дата начала
- Дата окончания
для каждого GroupID есть несколько строк - так несколько начала/даты окончания per GroupId (внутри группы нет перекрытия)
Что бы я хотел сделать, это найти все пересекающиеся даты между всеми группами Таким образом, если группа 1 имеет следующие даты
1/1/2001 - 1/31/2001
3/31/2001 - 4/5/2001
Группа 2 имеет следующие
1/25/2001 - 5/1/2001
Группа 3 имеет следующую
1/22/2001 - 4/1/2001
выше всех пересекаются по адресу:
1/25/2001 - 1/31/2001
3/31/2001 - 1/4/2001
Как это сделать в SQL? Далее имеет логику для 2-х диапазонов дат в пределах одной таблицы, но мне это нужно для диапазонов дат п в одной таблице:
SELECT
case
when t1.StartDate > t2.StartDate then t1.StartDate
else t2.StartDate
END as StartDate,
CASE WHEN t1.EndDate < t2.EndDate THEN t1.EndDate
ELSE t2.EndDate
END as EndDate
FROM Table1 t1
JOIN Table1 t2 ON t1.StartDate <= t2.EndDate AND t1.EndDate >= t2.StartDate
(примечание: В качестве дополнительного ограничения я делаю это в LINQ к SQL)
Заранее спасибо
Совет. Полезно пометить вопросы базы данных как с помощью соответствующего программного обеспечения (MySQL, Oracle, DB2, ...) и версии, например. 'SQL-сервер-2014'. Различия в синтаксисе и особенностях часто влияют на ответы. – HABO