Удалить строки с перекрывающимися диапазонами дат - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть таблица со столбцами start_date и end_date, и я хочу удалить записи, в которых значения start_date и end_date находятся в существующем диапазоне дат

исходные данные:

start_date                  end_date
2019-03-18 00:00:00.000     2019-04-08 00:00:00.000
2019-04-01 00:00:00.000     2019-05-31 00:00:00.000
2019-04-03 00:00:00.000     2019-04-24 00:00:00.000
2019-04-24 00:00:00.000     2019-05-05 00:00:00.000
2019-05-06 00:00:00.000     2019-05-16 00:00:00.000
2019-05-06 00:00:00.000     2019-05-20 00:00:00.000
2019-05-06 00:00:00.000     2019-06-17 00:00:00.000
2019-05-10 00:00:00.000     2019-05-14 00:00:00.000

ожидаемый результат:

start_date                  end_date
2019-03-18 00:00:00.000     2019-04-08 00:00:00.000
2019-04-01 00:00:00.000     2019-05-31 00:00:00.000
2019-05-06 00:00:00.000     2019-06-17 00:00:00.000

1 Ответ

0 голосов
/ 25 сентября 2019

Ну, на самом деле это не так сложно, вы просто проверяете буквально то, за чем вы хотите проверить.Просто убедитесь, что нет никаких записей, которые бы содержали ваши начальную и конечную даты между их собственной начальной и конечной датой.

Примерно так будет работать:

select * 
  from so_58088216 wrapping
 where not exists (select * 
                     from so_58088216 wrapped 
                    where wrapping.start_date between wrapped.start_date and wrapped.end_date 
                      and wrapping.end_date between wrapped.start_date and wrapped.end_date
                      -- don't check against yourself, this would be easier if had an ID or something
                      and wrapping.start_date != wrapped.start_date 
                      and wrapping.end_date != wrapped.end_date)

Вот рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...