Zum Inhalt springen

SQL Profi gesucht! ;-)


 Teilen

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

... 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...