Сгруппируйте строки по идентификатору и найдите max / min (date_from, date_to) с пробелами в датах

Мне нужно сгруппировать данные по идентификатору и найти max / min (date_from, date_to). Но если есть разрыв даты, это должна быть новая строка.

У меня есть следующие данные:

SYS_ID  ITEM_ID DATE_FROM   DATE_TO
1       1       01.01.2019  20.01.2019
1       1       15.01.2019  10.02.2019
1       1       15.02.2019  20.02.2019
1       1       18.02.2019  10.03.2019
1       1       10.03.2019  22.03.2019
1       2       01.01.2019  10.01.2019
1       2       15.01.2019  25.01.2019

Результат должен быть:

SYS_ID  ITEM_ID DATE_FROM   DATE_TO
1       1       01.01.2019  10.02.2019
1       1       15.02.2019  22.03.2019
1       2       01.01.2019  10.01.2019
1       2       15.01.2019  25.01.2019

Есть ли способ сделать это без курсора?


person N.Grave    schedule 29.04.2019    source источник
comment
В ваших интервалах нет пробелов. Они накладываются друг на друга.   -  person ceving    schedule 29.04.2019
comment
Возможный дубликат как объединить перекрывающиеся временные интервалы?   -  person ceving    schedule 29.04.2019
comment
Могут ли когда-либо начинаться два периода в одну и ту же дату в одну и ту же дату для одной и той же пары sys / item?   -  person Gordon Linoff    schedule 29.04.2019
comment
@ceiving Они действительно пересекаются, но все же есть пробелы. См. Ответ: stackoverflow.com/questions/55906748/   -  person Michael Buen    schedule 29.04.2019


Ответы (1)


person    schedule
comment
Я не специалист по SQL Server, извините, если это глупый вопрос. sum(x) over (... - это промежуточный итог? Как 2_. Это действительно похоже на ваш вывод. - person Andrew; 30.04.2019
comment
@ Андрей В самом деле, это подсчет. Вам просто нужно поле, значение которого всегда увеличивается (например, date_from) до order by по факту. В противном случае идиома sum(x) over(... бегущего итога не будет работать. См. Неработающее текущее общее количество в первом запросе этого ответа, он использует order by в поле, которое не увеличивается: stackoverflow.com/questions/55877663/ - person Michael Buen; 01.05.2019
comment
Отлично, спасибо. Тот же самый SQL не работает как текущая сумма в Teradata, где я это тестировал. Он требует, чтобы rows unbounded preceding работал как текущая сумма. - person Andrew; 01.05.2019
comment
@Andrew Пробовал rows unbounded preceding, работает на сервере Sql, результат тот же. Похоже, rows unbounded preceding является фреймом окна по умолчанию, если фрейм окна не указан - person Michael Buen; 02.05.2019