2013-02-09 14 views
5

Chcę podsumować wszystkie różnice czasowe, aby pokazać całkowity czas pracy wolontariusza. Pierwsze wynik zestawu różnic czasowych jest proste:MySQL - SUM grupy różnic czasowych

Select timediff(timeOut, timeIn) 
FROM volHours 
WHERE username = 'skolcz' 

który zawiera wykaz razy przez godziny, ale potem chcę podsumować do ogólnej sumy.

Więc jeśli tabela wynikowa jest:

12:00:00 
10:00:00 
10:00:00 
08:00:00 

byłoby zaledwie Razem 40 godzin.

to istnieje sposób, aby zrobić coś takiego:

SELECT SUM(Select timediff(timeOut,timeIn) 
FROM volHours 
WHERE username = 'skolcz') as totalHours 

?

Odpowiedz

11
Select SEC_TO_TIME(SUM(TIME_TO_SEC(timediff(timeOut, timeIn)))) AS totalhours 
FROM volHours 
WHERE username = 'skolcz' 

Jeśli nie, to może:

Select SEC_TO_TIME(SELECT SUM(TIME_TO_SEC(timediff(timeOut, timeIn))) 
FROM volHours 
WHERE username = 'skolcz') as totalhours 
+0

nie musisz grupować według nazwy użytkownika, ponieważ już wybrał skolcz –

+0

Wygląda prawie prawidłowo, ale otrzymuję odpowiedź "304538.000000", gdy prawdziwe dane to 12:00:00 04:00:00 00:30:00 05 : 00: 00 09:00:00 00:04:32 00:11:32 00:11:06 –

+0

Zaktualizowany - spróbuj ponownie? Być może trzeba wykonać dwa kroki ... – Matthew

1

spróbować coś takiego

Select SUM(timediff(timeOut, timeIn)) as total 
FROM volHours 
WHERE username = 'skolcz' 
3

Prawie uzyskać odpowiedź od Mateusza, wszystko co musisz zrobić, to dodać obsady:

Select CAST(SUM(timediff(timeOut, timeIn)) as time) as totalhours 
FROM volHours 
WHERE username = 'skolcz'  
+1

Nie myślałem o próbie użycia rzutu - trochę bardziej czytelnej niż moja druga iteracja o TIME_TO_SEC -> SEC_TO_TIME. Dzięki za to również. – Matthew