[MySQL, PHP] Gesamtdifferenz gruppierter Daten

Von: , Frage gestellt am Mi, 24. Jun 2009

Hallo,

ich habe nochmal eine Frage.
Ich habe eine MySQL Tabelle eigentlich für einen ganz anderen Zweck aufgebaut, wofür ich sie auch ohne Probleme verwenden kann.
Aufbau:
Name (varchar)| Zahl(int) | Uhrzeit (Timestamp)

Nun möchte ich folgendes Realisiere:

Bei welchem Namen tritt die größte Differenz (sowohl positiv als auch negativ) zum vorherigen Datensatz auf?

Viele Namen sind mehrfach in der Tabelle und sollen Gruppiert werden. Bei jedem Eintrag soll der vorherige Eintrag genommen werden und die Differenz der beiden Zahlen genommen werden.
Am Ende möchte ich eine Liste der Namen haben, die die größte Differenz zum vorherigen Eintrag aufweisen.

Ich hoffe ich habe das halbwegs verständlich geschrieben und das es dafür eine relativ einfach Lösung gibt, was ich allerdings nicht glaube.

Wie gesagt die Tabelle gibt es schon länger (1 Jahr), wenn man mir vorher gesagt hätte das die Funktion benötigt wird hätte ich sie anders aufgebaut ;-)

Vielen Dank für eure Ideen / Mühen
IceDragon

1 Antworten zu dieser Frage

  1. Antwort von nach 8 Tagen 0 hilfreich
    Re: [MySQL, PHP] Gesamtdifferenz gruppierter Daten

    hi IceDragon,

    hört sich an als hätten wir da ein ähliches problem (s.u. "sortierte ausgabe von gruppen")

    im ersten schritt würde ich ein kreuzpodukt der tabelle anlegen

    SELECT A.*,ABS(A.Zahl-B.Zahl) AS dif
    FROM tab A
    LEFT JOIN tab B
    ON (A.Name = B.Name AND A.Uhrzeit > B.Uhrzeit)
    ORDER BY (A.Uhrzeit - B.Uhrzeit)


    im 2. schritt (das is auch mein prob) nur die kleinsten zeit diferenzen wählen (also aufeinanderfolgende)

    SELECT *
    FROM (SELECT ...) C # hier select von 1.
    GROUP BY C.Name,C.Uhrzeit


    im 3. schritt dann die dif. berechnen und ausgeben

    SELECT *
    FROM (SELECT ...) D # hier select von 2.
    GROUP BY D.Name


    muss wohl noch ein wenig verfeinert werden aber is schonmal ein ansatz ;)

    lg Stefan

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!