#mysql #join #union
Вопрос:
У меня есть таблица, в которой в основном есть поля:
StartDate(DATE), EndDate (DATE), PayDay(DATE), isHoliday(TINY INT), Name (VAR CHAR)
Таблица следует приведенной ниже схеме
EndDate = DATE_ADD(dateStart, INTERVAL 13 DAY) payDay = DATE_ADD(dateStart, INTERVAL 4 DAY) Next StartDate = DATE_ADD(dateStart, INTERVAL 14 DAY);
Требование состоит в том, что пользователь введет дату, на основе которой мне нужно найти период(от даты начала до даты окончания), к которому относится дата следующего периода(от даты начала до даты окончания), и праздники, которые наступают между обоими.
Я попытался выполнить следующий запрос :
(SELECT AC.`EndDate`, @start_Date := AC.`StartDate`, AC.`Name`, AC.`Holiday`, AC.`PayDay` FROM `AvailabilityCalendar` AC WHERE "2021-12-22 00:00:00" BETWEEN StartDate AND EndDate) UNION (SELECT @end_Date := AC.`EndDate`, AC.`StartDate`, AC.`Name`, AC.`Holiday`, AC.`PayDay` FROM `AvailabilityCalendar` AC WHERE DATE_ADD(@sp_Date, INTERVAL 13 DAY) BETWEEN StartDate AND EndDate) UNION (SELECT @end_Date := AC.`EndDate`, AC.`StartDate`, AC.`Name`, AC.`Holiday`, AC.`PayDay` FROM `AvailabilityCalendar` AC WHERE AC.`StartDate` BETWEEN @start_Date AND @end_Date)
что работает нормально, но у него есть несколько операторов SELECT и СОЕДИНЕНИЙ, и это не похоже на правильное решение. Пожалуйста, ознакомьтесь со структурой таблицы, прилагаемой
Комментарии:
1. Пожалуйста, отредактируйте вопрос и добавьте данные в виде текста, а не изображения.