Как корректно настроить даты и устранить перекрывающиеся интервалы в 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-запрос, который даст мне нужный результат? Буду благодарен за любую помощь!