SQL Statement hilfe

...komplette Frage anzeigen

4 Antworten

Auch ich finde, wie die anderen auch, dass die Abfrage korrekt ist. Du musst den Fehler woanders suchen. Du sitzt irgendeinem Trugschluss auf. Kann es sein, dass alle Spieler das gleiche letzte Datum haben? Oder dass die Abfrage, die abläuft, gar nicht die Abfrage ist, die Du dafür hältst? Es sieht so aus, als ob die group by -Klausel nicht berücksichtigt würde. Du beschreibst auch nicht Dein Ergebnis genau genug. Bekommst Du nur eine Zeile oder eine Liste aller Spieler? Probiere die Abfrage zu modifizieren, um zu testen, dass tatsächlich Deine Abfrage läuft und versuche die Grenze herauszufinden, bis wann alles richtig läuft und ab wann falsch. Du musst auf jeden Fall systematisch vorgehen. Fehler sind oft ganz banal, wollen aber gefunden werden.

Dein Statement sieht doch korrekt aus, wo genau liegt dein Problem?

MarcelDavis123 03.07.2014, 15:07

es ist korrekt aber ich brauche von jedem Spieler den lezzten eintrag in der tabelle (am Datum gemessen)

0

Dein Statement sieht gut aus.

Wenn ich das richtig verstanden habe, wird lediglich das Datum falsch formatiert ausgegeben - oder ?

wie genau sieht denn dein ergebnis aus ?

MarcelDavis123 03.07.2014, 15:08

mein ergebnis gibt nur ein max wert aus aber ich brauch zu JEDEM player den max wert

0
SELECT * FROM PLAYER WHERE DATUM = (SELECT MAX(DATUM) FROM PLAYER)
MarcelDavis123 03.07.2014, 15:06

ja player heißt eine Spalte, die tabelle heißt liste somit wird nur ein wert ausgegeben aber es soll zu jedem Player der max(datum) wert ausgegeben werden

0
Snackpack 03.07.2014, 15:08
@MarcelDavis123

Ich hab die Tabelle bei mir nachgestellt und ausversehen "player" statt "list" genannt, deswegen steht das jetzt im Statement so drin, sorry. :D

Bei mir funktioniert Dein Statement super, wo ist das Problem?

0
MarcelDavis123 03.07.2014, 15:09
@Snackpack

dass nur ein maximal wert ausgegeben wird aber ich brauch zu jedem player den max wert einzelnd

0
Snackpack 03.07.2014, 15:20
@MarcelDavis123

Funktioniert bei mir einwandfrei, ich versteh Dein Problem nicht ...

i60 . tinypic . com / 13zbz40 . png

i58 . tinypic . com / 261nb78 . png

0
MarcelDavis123 03.07.2014, 15:27
@Snackpack

ja das funktioniert schon aber group by fasst zusammen und da ich den letzten wert brauche aus der spalte premium (wo immer 0 oder 1 drinne steht) wird bei group by das ergebnis verfälscht wenn der spieler 3 einträge mit 0 hat aber das neuste mit 1

0
Snackpack 03.07.2014, 15:34
@MarcelDavis123

Was hast Du denn für einen merkwürdigen Datenbankaufbau? Dir ist schon klar, dass Datenbanken eindeutig sein müssen und keine doppelten Einträge enthalten dürfen?

Warum machst Du denn für jede Änderung an vorhandenen Datensätzen einen neuen auf, statt die vorhandenen Datensätze zu updaten?

0
MarcelDavis123 03.07.2014, 21:03
@Snackpack

ic hab es jetz :) Und es sindalle durch das Datum eindeutig aber das mit den neuen datensätzen muss sein weil es eine art Protokoll ist

0
wotan38 04.07.2014, 15:03
@MarcelDavis123

Was in der Spalte premium steht, ist laut Deiner Abfrage völlig egal. Es wird ja nicht danach gefragt.

0
wotan38 04.07.2014, 15:15
@Snackpack

Deine Abfrage mag zwar funktionieren, bringt aber nicht die gewünschten Werte. Der Subselect bringt das höchste Datum (Gesamtdatum aller Spieler) und listet folglich nur die Spieler auf, die dieses Datum haben. Es sollen aber alle Spieler ausgegeben werden, jeder mit seinem eigenen höchsten Datum. So habe ich jedenfalls die Aufgabe verstanden. Eigentlich ist Deine Lösung genau das von MarcelDavis beschriebene Problem.

Richtig muss es heißen:

select max(datum), player from list group by player

Dabei werden alle Spieler ausgegeben, jeder mit seinem persönlichen höchsten Datum.

0

Was möchtest Du wissen?