Я пытаюсь создать 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;