如何按ID计算MySQL组中的时间?

时间:2017-03-23 02:21:45

标签: mysql

如何计算MySQL中的时间?所以我有下面的表格:

id | time     |
01 | 00:36:00 |
01 | 01:00:00 |
02 | 00:30:00 |

我需要时间按照这样的ID来计算这个群体:

id | time     |
01 | 01:36:00 |
02 | 00:30:00 |

2 个答案:

答案 0 :(得分:0)

我认为你想要的是sum

SELECT 
RIGHT('0' + CAST (FLOOR(COALESCE (SUM(
        datediff(second,
                cast('1900-01-01' as datetime),
                cast(time as datetime)
               )/3600.0), 0) / 60) AS VARCHAR (8)), 2)
               + ':' +
               RIGHT('0' + CAST (FLOOR(COALESCE (SUM(
        datediff(second,
                cast('1900-01-01' as datetime),
                cast(time as datetime)
               )/3600.0), 0) % 60) AS VARCHAR (2)), 2) + ':' + 
                RIGHT('0' + CAST (FLOOR((SUM(
        datediff(second,
                cast('1900-01-01' as datetime),
                cast(time as datetime)
               )/3600.0)* 60) % 60) AS VARCHAR (2)), 2)
             as DecimalHours
, ID
FROM #t 
group by ID 

我所做的是将您的时间首先转换为十进制(因此我们可以执行SUM),然后将总和格式化为时间格式。

答案 1 :(得分:0)

您可以将时间转换为秒,然后总结并重新格式化。

SELECT 
   id, 
   CONCAT(
      LPAD(FLOOR(seconds / 3600), 2, '0'), ':',         -- hour
      LPAD(FLOOR((seconds % 3600) / 60), 2, '0'), ':',  -- minute
      LPAD(seconds % 60, 2, '0')) as time               -- second
FROM 
    (SELECT id, 
          SUM(CAST(SUBSTRING(time, 1, 2) AS UNSIGNED) * 3600
          + CAST(SUBSTRING(time, 4, 2) AS UNSIGNED) * 60
          + CAST(SUBSTRING(time, 7, 2) AS UNSIGNED)) AS seconds
    FROM <your table name>
    GROUP BY id) AS summary 

您可以在此处引用演示http://rextester.com/INOI78655