rookie2006 Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Hallo, folgende Aufgabenstellung: Eine Datenbank Ranking, in welche jeweils das aktuelle Ranking im Verein eingetragen wird. Bsp: Athlet | Rang | Punkte | Datum 1 1 100 11.04.2007 2 2 80 11.04.2007 1 2 120 15.04.2007 2 1 125 15.04.2007 Nun benötige ich eine SQL Abfrage, die mir die aktuellsten Einträge jedes Athleten nach Rang sortiert ausgiebt. Das Ergebnis sollte folgendermassen aussehen: Athlet | Rang | Punkte | Datum 2 1 125 15.04.2007 1 2 120 15.04.2007 Bis jetzt funzte es mit folgendem SQL: SELECT t1.athlet, t1.rang, t1.punkte, t1.Datum FROM test t1 LEFT OUTER JOIN test t2 ON t1.Datum GROUP BY t1.athlet, t1.rang, t1.punkte, t1.Datum HAVING (t2.Datum IS NULL) ORDER BY t1.rang, t2.Datum Das liefert aber aktuell keine Datensätze retour :-( Wo liegt der Hund begraben??? DANKE FÜR EURE HILFE! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Batigoal Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Hallo, SELECT t1.athlet, t1.rang, t1.punkte, t1.Datum FROM test t1 LEFT OUTER JOIN test t2 ON t1.Datum GROUP BY t1.athlet, t1.rang, t1.punkte, t1.Datum HAVING (t2.Datum IS NULL) ORDER BY t1.rang, t2.Datum Also meiner Meinung nach kann die Abfrage nicht gscheit funktionieren. Aber ich kann noch nicht helfen, weil aus dieser Angabe geht eines nicht hervor: Warum wird bei der Abfrage t2.Datum auf NULL gerpüft? Heißt das, daß beim aktuellsten Eintrag das Datum nicht gesetzt wurde? Dann stimmt aber dein Beispiel nicht.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rookie2006 Geschrieben 2. August 2007 Autor Teilen Geschrieben 2. August 2007 Nein, bei allen Einträgen ist das Datum gesetzt. ich steh auf der leitung einen alternativen (und funktionierenden *g*) vorschlag? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoFool Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Hallo! SQL ist bei mir schon einige Zeit her aber wie wäre es mit folgendem Denkansatz -> Suche das maximale Datum jedes einzelnen Fahrers (Aggregat MAX und Group BY) (Ergebnis dieser Abfrage ist dann eine Tabelle mit Fahrer und Datum) -> und Frage dann mit einer "äußeren" Select Abfrage, die Daten der Tabelle ab (Stichwort IN) mehr fällt mir dazu auch nicht ein SG NoFool Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chilli Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 SELECT test_1.Athlet, test_1.Rang, test_1.Punkte, test_1.Datum FROM (SELECT Athlet, MAX(Datum) AS Expr1 FROM test GROUP BY Athlet) AS derivedtbl_1 INNER JOIN test AS test_1 ON derivedtbl_1.Athlet = test_1.Athlet AND derivedtbl_1.Expr1 = test_1.Datum ORDER BY test_1.Rang Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoFool Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 ... Vielleicht irgendwie so SELECT t3.athlet, t3.rang, t3.punkte, t3.datum FROM test t3 LEFT OUTER JOIN (SELECT t1.athlet, MAX(t1.datum) AS maxdatum FROM test t1 GROUP BY t1.athlet) AS t2 ON t3.athlet = t2.athlet AND t3.datum = t2.maxdatum ORDER BY t3.rang der Syntax kann bei dir ev. etwas anders sein (MySQL, MSSQL, Firebird usw) aber so könnte es ev. funktioieren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rookie2006 Geschrieben 2. August 2007 Autor Teilen Geschrieben 2. August 2007 SELECT test_1.Athlet, test_1.Rang, test_1.Punkte, test_1.Datum FROM (SELECT Athlet, MAX(Datum) AS Expr1 FROM test GROUP BY Athlet) AS derivedtbl_1 INNER JOIN test AS test_1 ON derivedtbl_1.Athlet = test_1.Athlet AND derivedtbl_1.Expr1 = test_1.Datum ORDER BY test_1.Rang herzlichen Dank! Das wars! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Batigoal Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Stimme meinen Vorpostern im Prinzip zu. Allerdings kommts auf die Datenbank an, ob das funktioniert Access z.B. nicht (OK...es ust Access, aber wer weiß was verwendet wird....bzw. welche Verison von z.B. MySql) Mein Tip: Versieh die Tabelle mit einem Primary Key, dann läßt sich das ganz einfach mit einer IN-Klausel lösen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Batigoal Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 OK....dann paßt wohl die DB Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.