Как сравнить дату с массивом дат в запросе SQL и обновить значение поля в MySQL? - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над задачей, в которой мне нужно найти ожидаемую дату для разрешения заявки, используя значения полей createdAt и sla_name. После этого мне нужно сравнить эту expected date с датами в таблице holidays.

Если expected date попадает в holidays, мне нужно расширить значение поля sla_name.

Этот запрос используется.

SELECT t.sla_meet, t.tid, t.ticket_id, t.ticket_name,t.createdAt,t.updatedAt,t.status, dw.dropdown_name 
        as ticket_priority,p.project_name, dw3.dropdown_name as ticket_status,t.sla as sla_name, 
        isn.issue_name as issue_type,inn.incidentName as incident_type,t.ticket_accepted_date,
        t.asset_id,t.ticket_closed_date,t.contact_number, 
        IF(NOW() <= DATE_ADD(t.createdAt,INTERVAL (t.sla)+1 DAY),'YES','NO') AS slaMeetData 
        from tickets t 
        JOIN assets ast ON t.asset_id=ast.asset_id 
        JOIN projects p ON p.project_id=ast.project_id 
        JOIN admin_dropdowns dw ON t.ticket_priority=dw.id 
        JOIN admin_dropdowns dw3 ON t.ticket_status=dw3.id 
        JOIN issues isn ON t.issue_type=isn.issue_id 
        JOIN incident_names inn ON t.incident_type=inn.incidentId 
        order by t.tid DESC

Это результирующие данные вышеуказанного запроса.

enter image description here enter image description here

Теперь мне нужно сравнить holidays в Выше запрос. И пример данных:

enter image description here

Если ожидаемая дата, которая входит в IF условие вышеупомянутого запроса, попадает в это holidays, Мне нужно обновить значение sla_name с помощью COUNT OF HOLIDAYS (Если есть начальные данные и конечные даты, нужно посчитать дни между ними) + sla_name .

Если ожидается дата Это относится к диапазону дат (даты начала и окончания праздников), необходимо рассчитать количество дней от ожидаемой даты до даты окончания и обновить это число в поле sla_name

Возможно ли сделать эту функцию в SQL? Я использовал вышеупомянутый запрос как VIEWS .

1 Ответ

1 голос
/ 23 апреля 2020

Вместо t.sla AS sla_name используйте это выражение, чтобы определить, следует ли добавлять длину перекрывающихся выходных к числу дней:

(
        t.sla + 
        IF(
            DATE_ADD(t.createdAt,INTERVAL (t.sla)+1 DAY) BETWEEN holidays.holiday_date AND holidays.end_date,
            DATEDIFF( holidays.end_date, holidays.holiday_date ), /* add holiday length number of days */
            0 /* no holiday overlap so don't add any days */
        )
) as sla_name

Вам также нужно присоединиться к таблице выходных дней, чтобы найти праздник (если есть), который перекрывает указанную дату:

JOIN holidays ON ( DATE_ADD(t.createdAt,INTERVAL (t.sla)+1 DAY) BETWEEN holidays.holiday_date and holidays.end_date )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...