Мне нужен mysql Query , учитывая дату (например, '2025-02-10 '), возвращает последнее происшествие в тот же будний день в текущем квартале. Однако, если данная дата уже прошла , это произошло, она должна вернуть в тот же будний день в следующем квартале .
Logic:
- Определить будний день данной даты (понедельник, вторник и т. Д.).
Найдите последнее происшествие < /strong> того же дня в текущем квартале. это происшествие, верните в тот же будний день со следующего квартала .
дата даты < /th>
В будний день данной даты < /th>
последний тот же будний день Quarter < /th>
ожидаемый результат < /th>
< /tr>
< /thead>
2025-02-10 < /td>
понедельник < /td>
2025-03-31 (понедельник) < /td>
2025-03-31 (текущий квартал) < /td >
< /tr>
2025-04-10 < /td>
четверг < /td>
2025-06-26 (четверг) < /td>
2025-06-26 (текущий квартал) < /td>
< /tr>
2025-12-29 < /td>
понедельник < /td>
2025-12-29 (понедельник) < /td>
< TD> 2026-03-30 (следующий квартал) < /td>
< /tr>
< /tbody>
< /table> < /div>
Что я попробовал: < /strong> < /h3>
Я написал запрос, чтобы получить последнее происшествие определенного буднего дня за четверть , но мне нужна помощь, изменив ее на динамически выбирать тот же будний день, что и дата дата , и обрабатывать случаи, когда дата уже прошла.
SET @target_weekday = 0; -- Monday (0 = Monday, ..., 6 = Sunday)
SELECT date,
CASE
WHEN QUARTER(date) = 1 THEN DATE_SUB(
STR_TO_DATE(CONCAT(YEAR(date), '-03-31'), '%Y-%m-%d'),
INTERVAL (WEEKDAY(STR_TO_DATE(CONCAT(YEAR(date), '-03-31'), '%Y-%m-%d')) - @target_weekday + 7) % 7 DAY
)
WHEN QUARTER(date) = 2 THEN DATE_SUB(
STR_TO_DATE(CONCAT(YEAR(date), '-06-30'), '%Y-%m-%d'),
INTERVAL (WEEKDAY(STR_TO_DATE(CONCAT(YEAR(date), '-06-30'), '%Y-%m-%d')) - @target_weekday + 7) % 7 DAY
)
WHEN QUARTER(date) = 3 THEN DATE_SUB(
STR_TO_DATE(CONCAT(YEAR(date), '-09-30'), '%Y-%m-%d'),
INTERVAL (WEEKDAY(STR_TO_DATE(CONCAT(YEAR(date), '-09-30'), '%Y-%m-%d')) - @target_weekday + 7) % 7 DAY
)
WHEN QUARTER(date) = 4 THEN DATE_SUB(
STR_TO_DATE(CONCAT(YEAR(date), '-12-31'), '%Y-%m-%d'),
INTERVAL (WEEKDAY(STR_TO_DATE(CONCAT(YEAR(date), '-12-31'), '%Y-%m-%d')) - @target_weekday + 7) % 7 DAY
)
END AS last_specified_day_of_quarter
FROM (SELECT '2025-02-10' AS date) AS temp;
< /code>
Проблема мне нужна помощь с: < /strong> < /h3>
- правильно проверяя, прошла ли дата и переключение на следующий квартал. вместо жестко кодируемого дня, как воскресенье.
Подробнее здесь: https://stackoverflow.com/questions/794 ... xt-quarter
Мобильная версия