MySQL - Verweildauer berechnen
MySQL:
Ich habe eine einfache Tabelle "access" mit folgenden Feldern
id (integer)
zeit (time)
aktion (varchar)
es wird dort mit zeitlich fortlaufender id gespeichert, zu welcher Zeit welche Aktion durchgeführt wurde,
also z.B.
id=1 zeit=10:00:00, aktion=aufgabe1
id=2 zeit=10:05:00, aktion=aufgabe2
id=3 zeit=10:15:00, aktion=aufgabe3
id=4 zeit=10:20:00, aktion=ende
Das Ziel der Abfrage ist es nun, die Verweildauer bei einer Aufgabe zu berechnen und dann folgendes rauszukriegen:
id=1 dauer=differenz zeit(id2),zeit(id1), aktion=aufgabe1
id=2 dauer=differenz zeit(id3),zeit(id2), aktion=aufgabe2
id=3 dauer=differenz zeit(id4),zeit(id3), aktion=aufgabe3
Wie könnte man das am schnellsten realisieren ? Irgendwie die Tabelle mit "sich selbst" joinen, aber wie konkret,
ich hab folgendes versucht:
SELECT A.id, A.aktion, timediff(B.zeit,A.zeit) AS dauer
FROM access A LEFT JOIN access B
ON
A.idnr = B.idnr
kommt aber nix raus, also alles 0 als Ergebnis, ich vermute es liegt am "ON ..."
und wie könnte man zusätzlich noch bei der Ausgabe die letzte Aktion, also Ende "löschen" ?
mit Limit ? also zuerst die Anzahl aller Datensätze bestimmen und die Ausgabe dann mit -1 als Limit setzen ?
Gruß
Michael
MySQL:
Ich habe eine einfache Tabelle "access" mit folgenden Feldern
id (integer)
zeit (time)
aktion (varchar)
es wird dort mit zeitlich fortlaufender id gespeichert, zu welcher Zeit welche Aktion durchgeführt wurde,
also z.B.
id=1 zeit=10:00:00, aktion=aufgabe1
id=2 zeit=10:05:00, aktion=aufgabe2
id=3 zeit=10:15:00, aktion=aufgabe3
id=4 zeit=10:20:00, aktion=ende
Das Ziel der Abfrage ist es nun, die Verweildauer bei einer Aufgabe zu berechnen und dann folgendes rauszukriegen:
id=1 dauer=differenz zeit(id2),zeit(id1), aktion=aufgabe1
id=2 dauer=differenz zeit(id3),zeit(id2), aktion=aufgabe2
id=3 dauer=differenz zeit(id4),zeit(id3), aktion=aufgabe3
Wie könnte man das am schnellsten realisieren ? Irgendwie die Tabelle mit "sich selbst" joinen, aber wie konkret,
ich hab folgendes versucht:
SELECT A.id, A.aktion, timediff(B.zeit,A.zeit) AS dauer
FROM access A LEFT JOIN access B
ON
A.idnr = B.idnr
kommt aber nix raus, also alles 0 als Ergebnis, ich vermute es liegt am "ON ..."
und wie könnte man zusätzlich noch bei der Ausgabe die letzte Aktion, also Ende "löschen" ?
mit Limit ? also zuerst die Anzahl aller Datensätze bestimmen und die Ausgabe dann mit -1 als Limit setzen ?
Gruß
Michael
Zuletzt bearbeitet: