我如何在MySQL中总结时间?

时间:2015-03-30 08:41:23

标签: mysql

DOWNTIME

正如您在图像中看到的,我有一个停机报告,显示所选日期所选工厂的停机时间。现在,我想在"Time Duration"列中添加所有值,并将其显示在"TOTAL TIME DURATION"附近的单独显示中。例如,在图像中,所选日期为2015年3月17日和2015年3月30日,所选工厂为Raw Mill。该报告显示了所选13天Raw Mill的停机时间。我想在"Time duration"列中添加这13天的所有时间,并将其显示在"TOTAL TIME DURATION"附近的单独显示中。时间格式为HH:MM:SS。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

使用以下查询:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration))) FROM TableName AS 'TOTAL TIME DURATION';

但是,有时总持续时间可能超过允许的最大时间值,即" 838:59:59"。因此,您通常可以使用以下查询来计算溢出的和:

SELECT CONCAT_WS(' hours and ',
  ((SUM(TIME_TO_SEC(Time_Duration)) DIV (TIME_TO_SEC('838:59:59')+1))*839), 
  (SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration)) MOD (TIME_TO_SEC('838:59:59')+1))) 
) 
FROM TableName AS 'TOTAL TIME DURATION'

这将以以下形式提供输出:

3 hours and 3:45:05

您还可以获得所需格式的结果,例如: 6:45:05,包含以下自定义查询:

SELECT CONCAT_WS(
    ':', 
    (SUM(TIME_TO_SEC(Time_Duration)) DIV 3600, 
    (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) DIV 60, 
    (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) MOD 60)
FROM TableName AS 'TOTAL TIME DURATION';

答案 1 :(得分:0)

步骤

  1. 获取给定日期范围的time duration
  2. 汇总所有time duration
  3. 将结果投回time,这只是total time duration
  4. 示例

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>