2013-02-09 38 views
5

Tôi muốn tổng hợp tất cả các chênh lệch thời gian để hiển thị tổng số giờ làm việc của một tình nguyện viên. Việc có được tập hợp các khác biệt về thời gian kết quả rất dễ dàng:MySQL - SUM của một nhóm thời gian khác nhau

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

cung cấp danh sách thời gian hàng giờ nhưng sau đó tôi muốn tính tổng số giờ này.

Vì vậy, nếu các tập kết quả là:

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

Nó sẽ chỉ tổng 40 giờ.

này Có cách nào để làm điều gì đó như:

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

?

Trả lời

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

Nếu không thì có lẽ:

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

u không phải nhóm theo tên người dùng vì anh ta đã chọn skolcz –

+0

Trông gần như đúng nhưng tôi nhận được '304538.000000' cho câu trả lời khi dữ liệu thực là 12:00:00 04:00:00 00:30:00 05 : 00: 00 09:00:00 00:04:32 00:11:06 –

+0

Đã cập nhật - thử lại? Có thể cần phải có hai bước để làm việc ... – Matthew

1

thử một cái gì đó như thế

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

Bạn hầu như có được câu trả lời từ Matthew, tất cả các bạn cần làm là thêm dàn diễn viên:

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

Không nghĩ đến việc cố gắng sử dụng tính năng truyền - ít dễ đọc hơn so với lần lặp thứ hai của TIME_TO_SEC -> SEC_TO_TIME. Cảm ơn cho điều đó là tốt. – Matthew

Các vấn đề liên quan