2015-06-24 55 views
0

我正在尝试创建计算两个日期之间的小时数(2015-01-01 12:12:12)的SQL查询。这个查询的复杂性仅在周一至周五上午8点至下午6点之间总结数小时。计算MySQL中日期之间的工作时间

我需要它来计算我们的Mantis BT系统中记录的问题需要多长时间才能解决。我们的客户可以在工作时间之外记录问题,但我只想根据工作时间计算小时数。

我们计算记录问题的日期/时间(submitted_date)到问题解决的时间(最大updated_date和“已解决”状态)之间的差异。难点在于一个问题可以解决,然后在未来重新开放。通过使用最大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; 
+2

您是否必须考虑公共假期或任何特定于您的组织的内容?如果答案是肯定的,最好的第一步可能是创建并填充日历表。 –

+0

是的,我不得不考虑公众假期和工作时间(上午8点到下午6点)。 – bruninhu

回答

0

This tutorial是为SQL编写的,但可以在MySQL中轻松复制。

你只需要定义你的工作时间,然后引用这些来计算时间。