Я пытаюсь извлечь все даты окончания событий для событий, срок действия которых истекает через 2 рабочих дня. Итак, для пятницы и четверга мне нужны даты, которые заканчиваются через 4 дня или меньше, для дат субботы, которые заканчиваются через 3 дня, для дат воскресенья-среды, которые заканчиваются в течение 2 дней, и +3 для всех государственных праздников, которые перечислены в столбце dateval в tempdate .
Приведенный ниже скрипт не работает, он содержит только даты +2 дня. Я понимаю, что мне нужно использовать оператор case, но я действительно не понимаю, как это реализовать. У кого-нибудь есть идеи?
select event_end_date
from mdmins.table
/*separating by date to find expiring dates*/
where ( (dayofweek(c.event_end_date) in (5,6) /*Friday & Thursday*/
and date(c.event_end_date) < current_date + 4 days
and date(c.event_end_date) >= current_date)
or (dayofweek(c.event_end_date) in (1,2,3,4) /*All other days of week*/
and date(c.event_end_date) < current_date + 2 days
and date(c.event_end_date) >= current_date)
or (dayofweek(c.event_end_date) = 7 /*Saturday - not that this should be needed, but just in case*/
and date(c.event_end_date) < current_date + 3 days
and date(c.event_end_date) >= current_date)
or (date(c.event_end_date) < (select dateval from mdmins.tempdate where dateval = (current date + 3 days)) /*a holiday is on in 3 days, so 2 working days before*/
and date(c.event_end_date) >= current_date) )
CASE
(что является реальной вещью), и он вам не нужен. У вас есть обычный файл календаря сworkingDay
логическим столбцом? Это значительно облегчило бы написание. Файлы календаря, без сомнения, являются одной из самых полезных аналитических таблиц. За исключением этого, создание временной/виртуальной таблицы с помощью CTE иVALUES(...)
значительно упростило бы это. - person Clockwork-Muse   schedule 18.09.2014