Подсчет рабочих часов между датами в MySQL

Я пытаюсь создать SQL-запрос, который вычисляет количество часов между двумя датами (2015-01-01 12:12:12). Сложность этого запроса заключается в суммировании часов только с понедельника по пятницу с 8:00 до 18:00.

Мне нужно, чтобы рассчитать, сколько времени потребовалось для решения проблемы, зарегистрированной в нашей системе Mantis BT. Наши клиенты могут регистрировать проблемы в нерабочее время, но я хочу рассчитать часы только на основе нашего рабочего времени.

Мы рассчитываем разницу между датой/временем регистрации проблемы (дата отправки) и датой ее решения (максимальная дата_обновления и статус «решено»). Сложность в том, что проблему можно решить, а затем вновь открыть в будущем. Используя максимальное значение updated_date, мой сценарий включает дни, когда проблема находилась в статусе «решено», что неверно. Он должен включать только дни, пока проблема открыта.

SELECT
    proj.name,
    bugs.id,
    summary,
    users2.username AS Assigned_to,
    CASE bugs.status
        WHEN  '80' THEN  'Resolved'
        WHEN  '90' THEN  'Closed'
    END AS Status,
    bugs.date_submitted AS date_submitted,
    MAX(date_modified) AS last_date_modified
FROM
    mantis_bug_table bugs
    LEFT JOIN mantis_bugnote_table notes ON notes.bug_id = bugs.id
    INNER JOIN mantis_bug_history_table hist ON bugs.id = hist.bug_id
    LEFT JOIN mantis_user_table users2 ON users2.id = bugs.handler_id
    INNER JOIN mantis_project_table proj ON proj.id = bugs.project_id 
WHERE
    bugs.project_id = 102 
    AND hist.field_name = 'status' 
    AND bugs.status IN (80,90) 
    AND date_modified >= '2015-01-01'
GROUP BY
    summary;

person bruninhu    schedule 24.06.2015    source источник
comment
Придется ли вам принимать во внимание праздничные дни или что-то, что специфично для вашей организации? Если ответ на любой из этих вопросов положительный, лучшим первым шагом может быть создание и заполнение таблицы календаря.   -  person Damien_The_Unbeliever    schedule 25.06.2015
comment
Да, мне придется учитывать праздничные дни и рабочее время (с 8:00 до 18:00).   -  person bruninhu    schedule 25.06.2015


Ответы (1)


Это руководство написан для SQL, но может быть легко воспроизведен в MySQL.

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

person developer__c    schedule 25.06.2015