Marc2: Werte aus Datenbank anzeigen

Hallo,
ich habe ein Problem mit der Ausgabe von Daten aus meiner Datenbank.

Die Tabelle ist folgendermaßen aufgebaut:

Tabelle: createdbackups

Spalte 1: meldung
Spalte 2: timestamp
Spalte 3: customerID

Hier ein paar Beispielwerte:

meldung                 timestamp                customerID
Erfolgreich             2007-08-13 09:51:11      15
Nicht erfolgreich       2007-08-13 10:12:11      15
Nicht erfolgreich       2007-08-13 09:00:11      35
Erfolgreich             2007-08-13 10:21:11      35

Nun möchte ich die Daten so ausgeben, das von jeder customerID immer das neuste Datum ermittelt wird, und dann zu diesem Datum die dazugehörige Meldung angezeigt wird.

Nicht erfolgreich         2007-08-13 10:12:11      15
Erfolgreich               2007-08-13 10:21:11      35

Nun habe ich es so probiert:

  
SELECT meldung, MAX(timestamp), customerID  
FROM createdbackups  
GROUP BY customerID  

Es klappt auch wunderbar, bis auf eine sehr wichtige Sache. Es wird nicht die zu dem timestamp gehörige meldung angezeigt.

Ich weiß nicht mehr was ich noch probieren könnte. Ich würde mich sehr über Ideen von euch freuen.

  1. Es klappt auch wunderbar, bis auf eine sehr wichtige Sache. Es wird nicht die zu dem timestamp gehörige meldung angezeigt.

    Ich tippe mal auf folgendes: Du selektierst zwar für den timestamp durch MAX() einen eindeutigen Wert, aber für meldung werden unter Umständen mehrere Werte ausgewählt (du sagst ja nicht, welchen meldung-Wert du haben willst), darüber stolpert MySQL dann.

    Grober Code:
    Zuerst
    SELECT MAX(timestamp) AS zeit, costumerID
    FROM xyz
    GROUB BY costumerID
    und danach in einer zweiten Abfrage den enstprechenden Wert meldung mit
    WHERE costumerID = bla AND timestamp = zeit

    Gruß, Volker

  2. Hallo!

    Nun habe ich es so probiert:

    SELECT meldung, MAX(timestamp), customerID
    FROM createdbackups
    GROUP BY customerID

      
    Probiers mal mit einem Subselect  
    Select \* from createdbackups b where timestamp=(select max(timestamp) from createdbacksups WHERE timestamp=b.timestamp)  
      
    Ha bich jetzt nicht überprüft. Schau mal ob du mit dem Ansatz weiter kommst oder ob der völliger Müll ist.  
      
      
    mfg  
      frafu
    
  3. SELECT meldung, timestamp, customerID
    FROM createdbackups
    ORDERD BY timestamp DESC

    würde es das nicht auch tun?

  4. JETZT GEHT ES! :) :)

    Zwar nicht direkt wegen dem Code von euch, aber das hat mich auf jeden Fall weiter gebracht.

    Diese Seite war die Lösung:
    http://sql-und-xml.de/sql-praxis/detailtabelle-aggregatfunktion-einzelzeilen.html

    Hier mein Code zu dem ich noch eine letzte Frage habe.
    Wie ihr unten sehen könnt, habe ich unten ORDER BY D.id geschrieben. In SELECT habe ich jedoch nicht D.id "abgerufen".

    Ist das OK? Oder muss D.id im SELECT stehen wenn MySQL mit ihm arbeiten soll?

    Es funktioniert mit beiden Varianten, ich will jedoch einen ordentlichen Code schreiben.

      
    SELECT D.name, D.domain, A.error, A.timestamp  
    FROM createdbackups AS A  
    INNER JOIN (  
      
    SELECT B.customerID, Max( B.timestamp ) AS 'zeit'  
    FROM createdbackups AS B  
    GROUP BY B.customerID  
    ) AS C  
    INNER JOIN kunden AS D ON A.customerID = C.customerID  
    AND A.timestamp = C.zeit  
    AND A.customerID = D.id  
    ORDER BY D.id
    

    Danke!