2013-02-15 32 views
7

Vì vậy, giả sử chúng tôi có 3 trường, username, start_date, end_dateSự khác biệt trung bình giữa hai ngày, được nhóm theo trường thứ ba?

Người dùng bắt đầu và dừng nhiều bản ghi, ví dụ như bên dưới bob đã bắt đầu và dừng hai bản ghi.

bob 1/2/13 11:00 1/2/13 13:00 
jack 1/2/13 15:00 1/2/13 18:00 
bob 2/2/13 14:00 1/2/13 19:00 

Tôi cần biết thời gian trung bình (tức là giữa đầu và cuối), tính theo giờ, cho mỗi người dùng (nghĩa là nhóm theo người dùng chứ không chỉ cho mỗi hàng).

Tôi hoàn toàn không thể hiểu được cách thực hiện khác biệt, trung bình VÀ nhóm theo? Bất kỳ giúp đỡ?

Trả lời

9

Bạn không chỉ định mức chi tiết bạn muốn cho khác biệt. Đây có phải nó trong ngày:

select username, avg(end_date - start_date) as avg_days 
from mytable 
group by username 

Nếu bạn muốn sự khác biệt chỉ trong vài giây, sử dụng datediff():

select username, avg(datediff(ss, start_date, end_date)) as avg_seconds 
... 

datediff có thể đo lường khác trong bất kỳ đơn vị thời gian lên đến năm bằng cách thay đổi các tham số đầu tiên, mà có thể là ss, mi, hh, dd, wk, mm hoặc yy.

+0

ngày - ngày trả về sự khác biệt trong những ngày IIRC – Viehzeug

+0

@Viehzeug thêm giải pháp cho giây – Bohemian

+0

Wow, ok, đơn giản hơn tôi tưởng tượng. Đoán tôi đã làm cho nó phức tạp hơn trong đầu của tôi hơn là cần thiết. –

2
SELECT username, AVG(TIMESTAMPDIFF(HOUR, start_date, end_date)) 
FROM table 
GROUP BY username 
+0

Cảm ơn vì điều này, trợ giúp tuyệt vời thật nhanh. Thật không may tôi không thể đánh dấu hai câu trả lời. –

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