MySQL Запрос, чтобы получить последнее происшествие в тот же будний день в текущем или следующем кварталеMySql

Форум по Mysql
Ответить
Anonymous
 MySQL Запрос, чтобы получить последнее происшествие в тот же будний день в текущем или следующем квартале

Сообщение Anonymous »

Описание задачи:
Мне нужен mysql Query , учитывая дату (например, '2025-02-10 '), возвращает последнее происшествие в тот же будний день в текущем квартале. Однако, если данная дата уже прошла , это произошло, она должна вернуть в тот же будний день в следующем квартале .
Logic:
  • Определить будний день данной даты (понедельник, вторник и т. Д.).
    Найдите последнее происшествие < /strong> того же дня в текущем квартале. это происшествие, верните в тот же будний день со следующего квартала .
Примеры сценарии: < /strong> < /h3>



дата даты < /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»