2013-02-15 15 views
7

Also sagen wir haben 3 Felder, username, start_date, end_dateDurchschnittliche Differenz zwischen zwei Daten, gruppiert nach einem dritten Feld?

Benutzer starten und stoppen mehrere Datensätze, zB unter Bob hat begonnen und zwei Datensätze gestoppt.

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 

Ich brauche die durchschnittliche Zeit, wissen genommen (dh diff zwischen Anfang und Ende), in Stunden, für jeden Benutzer (dh Gruppe von Benutzern, nicht nur für jede Zeile).

Ich kann nicht ganz um mich herum, wie man die diff, durchschnittliche UND-Gruppe durch? Irgendeine Hilfe?

Antwort

9

Sie geben nicht die Granularität an, die Sie für das Diff wünschen. Dies gilt es in Tagen:

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

Wenn Sie den Unterschied in Sekunden möchten, verwenden Sie datediff():

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

datediff die diff in jeder Zeiteinheit messen kann durch Variation der ersten Parameter Jahren, die kann ss, mi, hh, dd, wk, mm oder yy sein.

+0

Datum - Datum gibt die Differenz in Tagen IIRC – Viehzeug

+0

@Viehzeug Lösung gegeben, für Sekunden – Bohemian

+0

Wow, ok, einfacher als ich dachte. Ich glaube, ich habe es in meinem Kopf komplexer gemacht, als es sein musste. –

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

Danke dafür, große Hilfe wirklich schnell. Leider kann ich zwei Antworten nicht ankreuzen. –

Verwandte Themen