steinadler Geschrieben 9. Juni 2010 Geschrieben 9. Juni 2010 (bearbeitet) Hallo, mit dieser Abfrage: SELECT MAX(datum) AS datum, id_element, id_ort_neu FROM tbl_log GROUP BY id_element, id_ort_neu erhalte ich folgende Daten: datum || id_element || id_ort_neu 07.06.2010 17:29:27 1 0 07.06.2010 17:29:53 2 0 08.06.2010 08:39:58 13 0 08.06.2010 08:56:39 16 0 08.06.2010 08:56:39 17 0 08.06.2010 08:56:39 18 0 08.06.2010 08:56:39 19 0 08.06.2010 08:56:39 20 0 08.06.2010 08:56:39 21 0 07.06.2010 13:51:14 1 1 09.06.2010 09:03:25 21 1 da stört mich aber schon, dass die id_element 21 doppelt vorhanden ist. Nun möchte ich aber nur die Datensätze haben, mit dem höchsten Datum für jedes id_element UND id_ort_neu muss 0 sein. Was möchte ich machen? Ich will die die Element-IDs, die im jüngsten Datensatz einen definierten Ort haben, ausgeben lassen. Was muss ich denn da schreiben??? Bearbeitet 9. Juni 2010 von steinadler
Kaeyu Geschrieben 9. Juni 2010 Geschrieben 9. Juni 2010 Wenn ich dich richtig verstanden habe suchst du: [...] HAVING id_ort_neu = 0 ? Nehm dir am besten ein Buch oder eine online Manual dazu, wenn du noch keine Erfahrung mit SQL-Befehlen hast. Das bringt dir mehr als wenn du für jede 'Kleinigkeit' nachfragen musst
steinadler Geschrieben 9. Juni 2010 Autor Geschrieben 9. Juni 2010 Wenn ich dich richtig verstanden habe suchst du: [...] HAVING id_ort_neu = 0 ? Im Prinzip dachte ich ja auch, dass das geht, allerdings liefert mir die Ausgabe das letzte Datum, welches id_ort_neu=0 enthält. Ich möchte aber nur eine Ausgabe haben, wenn es sich um den Datensatz mit dem letzten Datum handelt UND id_ort_neu=0 ist.
Der Kleine Geschrieben 9. Juni 2010 Geschrieben 9. Juni 2010 Sortiere doch bitte ein wenig deine Gedanken und frage den Rechner genau das, was du uns fragst: Vielleicht klappt dieses: SELECT datum, id_element, id_ort_neu FROM tbl_log where (MAX(datum) = datum and id_ort_neu=0) GROUP BY id_element, id_ort_neu
steinadler Geschrieben 9. Juni 2010 Autor Geschrieben 9. Juni 2010 Sortiere doch bitte ein wenig deine Gedanken und frage den Rechner genau das, was du uns fragst: Welche eine Weisheit spricht aus deinen Worten... Vielleicht klappt dieses: SELECT datum, id_element, id_ort_neu FROM tbl_log where (MAX(datum) = datum and id_ort_neu=0) GROUP BY id_element, id_ort_neu Nein... also da spuckt der Server eine Fehlermeldung aus (da in einer WHERE-Klausel keine Aggregatfunktionen stehen dürfen) Habe aber folgendes probiert: SELECT datum, id_element, id_ort_neu FROM tbl_log GROUP BY id_element, id_ort_neu, datum HAVING (id_ort_neu = 0) AND (datum = MAX(datum)) Abeer das bringt auch nicht den gewünschten Erfolg, da da nicht der jüngste Eintrag ausgewertet wird. Ich möchte im Prinzip für jede element_id den letzten Datensatz (Datum) auswerten, und wenn dieser id_ort_neu=0 hat soll er in der Ergebnisliste mit erscheinen.
steinadler Geschrieben 9. Juni 2010 Autor Geschrieben 9. Juni 2010 funktioniert jetzt..... SELECT id_element, datum, id_ort_neu FROM tbl_log WHERE (datum = (SELECT MAX(datum) AS Expr1 FROM tbl_log AS A WHERE (id_element = tbl_log.id_element))) AND (id_ort_neu = 0) ORDER BY id_element Danke für alle konstruktiven Beiträge
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden