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:
CREATE TABLE `listrank` ( `TurnID` int(10) UNSIGNED NOT NULL DEFAULT '0', `PID` int(11) NOT NULL DEFAULT '0', `Skalpy` float NOT NULL DEFAULT '0', `Gry` int(11) NOT NULL DEFAULT '0', KEY `TID` (`TurnID`), KEY `PID` (`PID`) ) 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
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:
SELECT PID, SUM( Skalpy ) , SUM( Gry ) , tournaments.DATA FROM listrank LEFT JOIN tournaments ON tournaments.TurnID = listrank.TurnID AND tournaments.DATA BETWEEN curdate() AND curdate() - interval 2 year GROUP BY PID HAVING tournaments.DATA IS NOT NULL;
ale niestety nie do konca zwraca to na czym mi zalezy!
#EDIT
A rozwiązanie wygląda tak

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