Ich habe eine Tabelle, die wie dieseSuche nach in einer Liste von Zeiten zwischen Zeit in
userid | eventid | description | date | starttime | endtime
1 1 Event 1 2016-02-02 09:30:00 11:00:00
1 2 Event 2 2016-02-02 13:30:00 15:00:00
1 3 Event 3 2016-02-02 17:30:00 21:00:00
2 4 Event 4 2016-02-03 13:00:00 14:00:00
2 5 Event 5 2016-02-03 15:00:00 16:00:00
Ich brauche zu finden sucht, was durch den Benutzer die Summe der Zeit zwischen den Ereignissen am selben Tag ist.
So:
userid | timeBetween
1 05:00:00
2 01:00:00
Ich sollte auch davon ausgehen, dass es überlappende Zeiten zum Beispiel event1 sein kann beginnt um 11.00 Uhr endet 13:00 Uhr und event2 beginnt 12:00 Uhr und endet 14.00 Uhr vom selben Benutzer am selben Tag. Diese Fälle sind selten und ich glaube, dass 00:00 hier die richtige Antwort ist.
Ich löste ein ähnliches Problem, die Summe der Länge aller Ereignisse pro Tag zu finden.
SELECT *,
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(`endtime`,`starttime`)))) as sumtime
FROM `events`
group by userid, date
order by sumtime desc
Ich habe diese Methode ausprobiert und es funktioniert nicht richtig, vor allem, wenn es Überschneidungen gibt. – AMD
Ah, ich habe die Überlappungen nicht bemerkt, obwohl es mathematisch gesehen korrekt wäre, da der Abstand zwischen 1pm und 12h -1 Stunde beträgt! Nicht sehr hilfreich in einer praktischen Umgebung. Sie müssten alle negativen Werte für diesen Tag subtrahieren (dh hinzufügen). – Mike
Ja, aber ich glaube, das ist eine gute Antwort für alle, die nach einem einfachen Weg suchen, um so schnell wie möglich Ergebnisse zu erhalten. – AMD