paulbrause: SUBQUERY & LIMIT

Beitrag lesen

Hallöchen!

Ich steht im Moment total aufm Schlauch, vielleicht kann mir ja jemand einen Denkanstoss geben... ;)

Folgende Situation: es geht um ein Spiel, in dem über mehrere Runden die Teilnehmer Punkte bekommen. Die Abfrage der Gesamtpunktzahl, Spitzenreiter der jeweiligen Runde, höchste erreichte Punktzahl usw. ist ja auch kein Problem.

Hier mal der (sehr) vereinfachte Tabellenaufbau:

  
+=======+========+========+  
| SPIEL | NAME   | PUNKTE |  
+=======+========+========+  
| 1     | Bernd  | 8      |  
+-------+--------+--------+  
| 2     | Bernd  | 2      |  
+-------+--------+--------+  
| 3     | Bernd  | 10     |  
+-------+--------+--------+  
| 4     | Bernd  | 4      |  
+-------+--------+--------+  
| 5     | Bernd  | 1      |  
+-------+--------+--------+  
| 6     | Bernd  | 3      |  
+-------+--------+--------+  
| 7     | Bernd  | 9      |  
+-------+--------+--------+  
| 1     | Klaus  | 9      |  
+-------+--------+--------+  
| 3     | Klaus  | 4      |  
+-------+--------+--------+  
| 5     | Klaus  | 2      |  
+-------+--------+--------+  
| 7     | Klaus  | 0      |  
+-------+--------+--------+  
| 1     | Stefan | 3      |  
+-------+--------+--------+  
| 2     | Stefan | 2      |  
+-------+--------+--------+  
| 3     | Stefan | 7      |  
+=======+========+========+  

Nun möchte ich allerdings für jeden Mitspieler die Punkte der letzten 3 Runden, die dieser mitgespielt hat, zusammenaddiert anzeigen.

Also nicht die 3 letzten Runden allgemein (7,6,5), sondern für jeden einzelnen Mitspieler (Bernd -> 7,6,5, Klaus 7,5,3, Stefan 3,2,1).

Als Ergebnis hätte ich also gerne eine Tabelle, die mir die Punkte, der jeweils letzten 3 mitgespielten Runden anzeigt (keine Gesamtpunktzahl !), also sowas wie:

  
+==================+  
| ERREICHTE PUNKTE |  
+==================+  
| Bernd  | 13      |  
+--------+---------+  
| Stefan | 12      |  
+--------+---------+  
| Klaus  | 6       |  
+==================+  

Ich hab's dann mal auf folgende Weise probiert, klappt aber nicht:

  
SELECT t.benutzer, SUM(t.punkte) AS punkte  
FROM test t  
WHERE t.spiel IN  
(  
  SELECT q.spiel  
  FROM test q  
  WHERE q.benutzer = t.benutzer  
  ORDER BY q.spiel  
  LIMIT 3  
)  
GROUP BY t.benutzer  
ORDER BY punkte DESC  

LIMIT darf man wohl nicht in einem Subquery verwenden... :(

So, meine Frage nun:
Wie kann man's noch lösen? Geht's eigentlich überhaut in einer einzigen Abfrage? Oder muss ich mit einer temporären Tabelle arbeiten?

Vielen Dank schon mal,
paulbrause