Mam 2 tabele w bazie:
tournaments gdzie znajdują sie dane o turnieju, w tym:
(*) TurnID - numer turnieju (pierwszy, drugi itp)
(*) Data - czyli kiedy sie odbyll
listrank zawiera informacje na temat zdobyczy punktowych oraz ilosci gier danego gracza w bazie oraz w jakim to turnieju uzyskal tą zdobycz:
Oto pelna specyfikacja:
  1. CREATE TABLE `listrank` (
  2. `TurnID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  3. `PID` int(11) NOT NULL DEFAULT '0',
  4. `Skalpy` float NOT NULL DEFAULT '0',
  5. `Gry` int(11) NOT NULL DEFAULT '0',
  6. KEY `TID` (`TurnID`),
  7. KEY `PID` (`PID`)
  8. ) TYPE=MyISAM;


TurnId - wiadomo - numer turnieju
PID - ID osoby ktora wystapila w danym turnieju
Skalpy - zdobycz punktowa
Gry - ilosc gier w jakich gracz wystapil w danym turnieju
Przykladowe dane w tabeli wygladaja tak:
Kod
TurnID PID Skalpy Gry
1 1 500 4
1 2 420 4
1 3 500 5
2 1 200 4
2 2 300 3
2 4 150 1
3 2 100 1
3 4 500 4
3 3 425 3
52 1 500 3

np wiersz 1 1 500 4 oznacza:
w turnieju 1 gracz o ID=1 zdobyl 500pkt w 4 grach.
Zapytanie jakie należy zadać ma następującą postać:
(*) wyszukaj zdobycze punktowe (= skalpy) wszystkich graczy ktorzy zagrali w przeciagu ostatnich 2 lat i oblicz ranking(UWAGA ranking = suma zdobytych punktow/ilosc gier)
(*) UWAGA: ranking powinien byc liczony tylko za okres 2 lat jesli jakis gracz zdobyl wczesniej punkty powinny one zostac pominiete i niezliczone!
Moje zapytanie ma postac:
  1. SELECT PID, SUM( Skalpy ) , SUM( Gry ) , tournaments.DATA
  2. FROM listrank LEFT JOIN tournaments ON tournaments.TurnID = listrank.TurnID AND tournaments.DATA
  3. BETWEEN curdate() AND curdate() - interval 2 year GROUP BY PID
  4. HAVING tournaments.DATA IS NOT NULL;

ale niestety nie do konca zwraca to na czym mi zalezy!

#EDIT

A rozwiązanie wygląda tak smile.gif

  1. SELECT PID, Name, SUM( Skalpy ) , SUM( Gry ), SUM( Skalpy ) / SUM( Gry ) AS Rank, tournaments.DATA
  2. FROM listrank LEFT JOIN tournaments ON tournaments.TurnID = listrank.TurnID AND tournaments.DATA
  3. BETWEEN curdate( ) - INTERVAL 2 year AND curdate( )
  4. WHERE tournaments.DATA IS NOT NULL
  5. GROUP BY PID
  6. ORDER BY Rank DESC