2017-03-23 2 views

답변

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을 수행 할 수 있음) 그 합계를 시간 형식으로 형식화했습니다.

+0

데모를 참조 할 수있는 방법을 할까? –

+0

이것은 시간 합계를 반환합니다. 실행 해 보셨습니까? @devian –

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 난 그냥 시간을 합산 할 필요가

관련 문제