Как корректно настроить даты и устранить перекрывающиеся интервалы в SQL-запросе для таблицы с начальными и конечными датами?

У меня возникла проблема с составлением SQL-запроса для корректировки дат в таблице. У меня есть следующая таблица "table_main":

start_date end_date name rate id_sup
2023-01-01 2023-02-01 name1 1 SUP1
2023-01-01 2023-02-01 name6 32 SUP3
2023-01-01 2023-02-01 name3 15 SUP2
2023-01-01 2023-02-01 name4 54 SUP2
2023-01-01 2023-02-01 name5 43 SUP1
2023-01-01 2023-02-01 name6 64 SUP1
2023-01-01 2023-01-15 name6 43 SUP1

Моя цель - корректировать даты таким образом, чтобы устранить пересечение дат между записями, сохраняя при этом последовательность начальных дат. Я использовал следующий SQL-запрос:

CREATE OR REPLACE TABLE temp_table AS
SELECT 
    CASE 
        WHEN t1.start_date <= t2.end_date THEN DATE_ADD(t2.end_date, INTERVAL 1 DAY)
        ELSE t1.start_date
    END AS start_date,
    t1.end_date,
    t1.industry,
    t1.exclusion_rate,
    t1.suppliers
FROM 
    table_main AS t1
LEFT JOIN 
    table_main AS t2
ON 
    t1.industry = t2.industry
    AND t1.suppliers = t2.suppliers
    AND t1.start_date <= t2.end_date
    AND t1.end_date >= t2.start_date
    AND (t1.start_date <> t2.start_date OR t1.end_date <> t2.end_date)

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

start_date end_date name rate id_sup
2023-01-01 2023-02-01 name1 1 SUP1
2023-01-01 2023-02-01 name6 32 SUP3
2023-01-01 2023-02-01 name3 15 SUP2
2023-01-01 2023-02-01 name4 54 SUP2
2023-01-01 2023-02-01 name5 43 SUP1
2022-01-16 2023-02-01 name6 64 SUP1
2022-02-02 2023-01-15 name6 43 SUP1

Я хотел бы получить следующий результат:

start_date end_date name rate id_sup
2023-01-01 2023-02-01 name1 1 SUP1
2023-01-01 2023-02-01 name6 32 SUP3
2023-01-01 2023-02-01 name3 15 SUP2
2023-01-01 2023-02-01 name4 54 SUP2
2023-01-01 2023-02-01 name5 43 SUP1
2022-01-16 2023-02-01 name6 64 SUP1
2022-01-01 2023-01-15 name6 43 SUP1

Можете ли вы помочь мне разобраться, как составить SQL-запрос, который даст мне нужный результат? Буду благодарен за любую помощь!


Ответы (0 шт):