2013-02-15 13 views
7

Powiedzmy, że mamy 3 pola, username, start_date, end_dateŚrednia różnica między dwiema datami pogrupowana według trzeciego pola?

Użytkownicy uruchamiają i zatrzymują wiele rekordów, np. Poniżej boba rozpoczęto i zatrzymano dwa rekordy.

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 

Muszę wiedzieć, średni czas podjąć (tj diff między początkiem a końcem), w godzinach, dla każdego użytkownika (czyli grupy przez użytkownika, a nie tylko dla każdego wiersza).

Nie mogę zrozumieć, jak zrobić różnicę, średnią ORAZ według grupy? Jakaś pomoc?

Odpowiedz

9

Nie określasz wymaganej ziarnistości dla pliku różnic. To robi to w dniach:

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

Jeśli chcesz różnicę w sekundach, użyj datediff():

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

DateDiff można zmierzyć diff w każdej jednostce Czas do lat przez zmianę pierwszy parametr, który może być ss, mi, hh, dd, wk, mm lub yy.

+0

data - data zwraca różnicę w dniach IIRC – Viehzeug

+0

@Viehzeug dodaje rozwiązanie dla sekund – Bohemian

+0

Wow, ok, prostsze niż sobie wyobrażałam. Sądzę, że czyniłem to bardziej złożonym w mojej głowie, niż było to konieczne. –

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

Dzięki za pomoc, bardzo szybko. Niestety nie mogę zaznaczyć dwóch odpowiedzi. –

Powiązane problemy