Устранение встроенных периодов времени - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица, содержащая данные для различных служб, разделенных на периоды времени, то есть каждая строка имеет дату начала и дату окончания.Некоторые из этих услуг одинаковы.

Я ищу решение о том, как удалить встроенные периоды одной и той же услуги, то есть все периоды, содержащиеся в аналогичном периоде с аналогичным периодом или аналогичные ему.В следующем примере я хочу удалить 2 и 3, так как их периоды встроены в 1:

enter image description here

1 Ответ

0 голосов
/ 08 сентября 2018

Вот примерный план запроса. Он выбирает вместо удаления, чтобы вы могли видеть, что удаляется:

SELECT *
FROM testdata todelete
WHERE EXISTS (
    SELECT 1
    FROM testdata tokeep
    WHERE
        todelete.start_date >= tokeep.start_date AND
        todelete.end_date <= tokeep.end_date AND
        todelete.rn <> tokeep.rn AND (
            todelete.start_date > tokeep.start_date OR
            todelete.end_date < tokeep.end_date OR
            todelete.rn > tokeep.rn
        )
)

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

Изменение приведенного выше примера с использованием LEFT JOIN для отображения строк, содержащих

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