mySQL max(Datum) Problem

M

Morlon2

Hi,
erstmal kurz nen paar Beispiel-DS:

stat_id - gilden_id - spieler - time - value
1 - 1 - Name1 - 20100924000000 - 5
2 - 1 - Name2 - 20100924000000 - 9
3 - 1 - Name3 - 20100924000000 - 6
4 - 1 - Name1 - 20100925000000 - 7
5 - 1 - Name2 - 20100925000000 - 9
6 - 1 - Name3 - 20100925000000 - 12
7 - 1 - Name2 - 20100926000000 - 11
8 - 1 - Name3 - 20100926000000 - 6
9 - 2 - Name1 - 20100924000000 - 5
10 - 2 - Name4 - 20100924000000 - 5
11 - 2 - Name4 - 20100925000000 - 6

Was ich aus der Tabelle jetzt brauch, wären alle Spieler einer bestimmten Gilde, von denen zum Zeitpunkt der letzten Datenerfassung Werte vorhanden waren. Sortiert nach Value zum letzten Zeitpunkt

Wenn ich vom oberen Beispiel also zb gilde 2 auswerten will bräuchte ich folgende Ausgabe:
7 - 1 - Name2 - 20100926000000 - 11
8 - 1 - Name3 - 20100926000000 - 6

Name1 fällt weg, weil ich zum 26.09. keine Werte hab, Name2 als erstes, da er zu diesem Datum den höchsten value hat.

Mein Ansatz:

SELECT spieler, value, max( time ) AS maxtime
FROM tabelle
WHERE gilden_id = 1
GROUP BY spieler
ORDER BY value DESC , time DESC

würde ausgeben:
1 - Name3 - 20100926000000 - 12
1 - Name2 - 20100926000000 - 11
1 - Name1 - 20100925000000 - 7

kann mir wer unter die arme greifen?
bin etwas ratlos und nicht so sehr bewandert was sql angeht... :-/

danke schonmal,
Morlon
 
edit: Im ersten Beispiel solls natürlich heißen:

"Wenn ich vom oberen Beispiel also zb gilde (!) 1 (!) auswerten will bräuchte ich folgende Ausgabe:"
 
Ungetestet:
SQL:
SELECT spieler, value, time
FROM tabelle
WHERE gilden_id = 1 AND time = (SELECT MAX(time) FROM tabelle WHERE gilden_id = 1 GROUP BY NULL)
GROUP BY spieler
ORDER BY value DESC , time DESC
 
erstmal danke für die Hilfe.

Einzeln funktionieren die 2 Abfragen wunderbar, aber zusammen leider nicht.
Wenn ich für time = (...) nen statischen Wert eintrag gehts wunderbar und die innere Abfrage funktioniert einzeln auch wie gewünscht.
Beides zusammen gibt mir folgende Meldung:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX( time )
FROM tabelle
WHERE gilden_id =
 
Welche MySQL Version verwendest du?
Ich kann ein vergleichbares Query ohne weiteres ausführen.
http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Edit: Ok. Das Erklärt den Fehler
Starting with MySQL 4.1 [...]

Versuch es mal so:
SQL:
SELECT @maxtime:=MAX(time) FROM  tabelle WHERE gilden_id = 1 GROUP BY NULL;
SELECT spieler, value, time
FROM tabelle
WHERE gilden_id = 1 AND time = @maxtime
GROUP BY spieler
ORDER BY value DESC , time DESC;

Und falls du keine zwei Anfragen gleichzeitig verwenden kannst (ich glaube das ist bei php mysql_query() der Falls), musst du es eben nacheinander machen.
 
Zuletzt bearbeitet:
Danke dir,
muss es zwar in 2 Querys aufsplitten, aber geht :)

kurze anmerkung, falls wer nen ähnliches problem hat:
den ersten query musst ich nochmal leicht abänder...

SELECT MAX(time) AS maxtime FROM tabelle WHERE gilden_id = 1 GROUP BY NULL;
 
Zurück