Einträge untereinander vergleichen
keke
- datenbank
Hallo Forum,
Folgene Frage beschäftigt mich jetzt seit einiger Zeit und ich weiss im Moment keinen Ansatz. Vielleicht könnt Ihr mir weiter helfen.
Kurz: Ich möchte aus einer MySQL-Datenbank herauslesen, wieviel Zeit im Schnitt zwischen zwei bestimmten Aktionen vergeht.
Vereinfachter Tabellenaufbau:
time(int),sessionId(int),action(varchar)
123450 1 a
123451 1 a
123452 1 b
123454 1 a
123456 1 b
Wenn immer Aktion "b" in der Tabelle steht, möchte ich die Zeitdifferenz zur Aktion "a" innerhalb derselben Session unmittelbar davor herausbekommen, diese natürlich nur 1mal.
So dass ich einen Durchschnittswert bekomme, wie lange in der Regel aktion "a" läuft, bis "b" eintritt.
Es folgt nicht zwingend auf jedes "a" ein "b", mich interessiert also "a" nur, wenn gleich danach "b" eintritt.
Das Problem ist, ich habe es hier mit mehreren Hundertausend Einträgen zu tun, eine Lösung über Perl/Php o.ä. fällt also aus.
Weiss einer vielleicht einen Tipp, mit welchem Ansatz ich das lösen könnte?
Danke schon mal,
keke
yo,
Weiss einer vielleicht einen Tipp, mit welchem Ansatz ich das lösen könnte?
warum du die zeit mit einem integer-datentyp speicherst, erschließt sich mir noch nicht. aber enie lösungsmöglichkeit wäre es, mit korrelierten unterabfragen zu arbeiten. diese gehen bei mysql aber erst ab 4.1+, insofern wäre es hilfreich zu erfahren, welche version dein dbms hat.
Ilja
Hallo Ilja,
Danke für Deine Antwort.
Installiert ist MySQL Version 5.0.45.
keke
aber enie lösungsmöglichkeit wäre es, mit korrelierten unterabfragen zu »» arbeiten. diese gehen bei mysql aber erst ab 4.1+, insofern wäre es »» hilfreich zu erfahren, welche version dein dbms hat.
Ilja
yo,
ich gehe davon aus, dass vor einem b, immer das passende a kommt und kein anderer wert.
SELECT t1.time -
(SELECT MAX(t2.time)
FROM tabelle t2
WHERE t2.time < t1.time
) Zeitdifferenz
FROM tabelle t1
WHERE t1.action = 'b'
;
Ilja
Hallo Ilja,
genau das wars! Olé Olé
Tausend Dank :)
keke
yo,
ich gehe davon aus, dass vor einem b, immer das passende a kommt und kein anderer wert.
SELECT t1.time -
(SELECT MAX(t2.time)
FROM tabelle t2
WHERE t2.time < t1.time
) Zeitdifferenz
FROM tabelle t1
WHERE t1.action = 'b'
;Ilja