2017-09-04 1 views
0

endDate 열과 함께 playerID을 나열하는 테이블이 있습니다. 이것들은 타임 스탬프입니다.여러 타임 스탬프 간의 차이 합계를 계산합니다.

예컨대

playerID startDate    endDate 
1   2017-06-01 12:00:00  2017-06-01 12:05:00 
1   2017-06-01 13:30:00  2017-06-01 13:33:00 
1   2017-08-04 14:57:00  0000-00-00 00:00:00 

나는 특정 플레이어의 startDateendDate 사이의 시간 (초)의 총 수를 얻을 수있는 쿼리를 실행하려합니다. endDate0000-00-00 00:00:00 인 경우 현재 시간을 사용해야합니다. 여기

내가 시도 것입니다 :

select 
    IF(endDate = '0000-00-00 00:00:00', CURRENT_TIMESTAMP, endDate) as finishDate, 
    sum((startDate-finishDate)) as timeTaken 
from table where playerID=1 group by playerID 

이 두 가지 문제가 있습니다. 알 수없는 열 오류가 발생할 때 finishDate을 사용할 수 있다고 생각하지 않습니다. playerID에 대한 모든 행의 합이 필요합니다.

답변

2

MySQL에는 초를 포함하여 다양한 단위로 두 개의 시간 소인의 차이를 계산할 수있는 편리한 함수 TIMESTAMPDIFF이 있습니다. CASE 표현식을 사용하여 (다소 홀수 인) 0 타임 스탬프를 현재 타임 스탬프로 대체하여 각 플레이어에 대해 간단히 집계하고 시작 및 종료 타임 스탬프의 차이를 합할 수 있습니다.

SELECT 
    playerID, 
    SUM(TIMESTAMPDIFF(SECOND, 
         startDate, 
         CASE WHEN endDate = '0000-00-00 00:00:00' 
          THEN CURRENT_TIMESTAMP ELSE endDate END)) AS timeTaken 
FROM yourTable 
GROUP BY playerID 

편집 : 나는 0000-00-00 00:00:00이 테이블에 무엇을하고 있는지 모르지만 나는 차라리 알려져 있지 않다 종료 타임 스탬프를 대표하는 NULL 같은 것을 사용합니다. 이렇게하면 코드가 약간 더 멋지게됩니다. 다음을 사용하여 알 수없는 종료 타임 스탬프를 확인할 수 있습니다.

COALESCE(endDate, CURRENT_TIMESTAMP) 
+0

대단히 감사합니다. – Chris

관련 문제