Avatar billede rane Nybegynder
18. november 2004 - 18:15 Der er 15 kommentarer og
2 løsninger

Group By og Limit

Jeg er ved at lave et golfsite, hvor vi skal have udregnet en slags "verdensrangliste". Den skal udregnes efter de sidste 16 gange hver spiller har spillet en match. Disse matcher kan spilles på vidt forskellige datoer.

Min tabel:

ID  PlayerID  ScheduledID  MatchType  MatchDate  MatchPoints
1    4      1          2    09-11-2004    0,1
2    2      1          2    09-11-2004    3,1
3    3      2          2    10-11-2004    3,1
4    1      2          2    10-11-2004    0,1
----------------------------------------------

De vigtige felter her er PlayerID og MatchPoints. Hver række er en match hvor PlayerID har opnået X antal MatchPoints.

Så er det jeg gerne vil have lavet en rangliste over de 16 sidst spillede matcher. Men hvordan fiiisen fikser man lige det?
Avatar billede hmortensen Nybegynder
18. november 2004 - 18:24 #1
Altså du vil ha id på den spiller der har flest point i hver match ?

Fx.:
playerid    matchdate  matchpoints
2          09-11-2004    3,1
3          10-11-2004    3,1
Avatar billede rane Nybegynder
18. november 2004 - 18:27 #2
Ja jeg vil have en Top10 liste over de spillere med de fleste matchpoints samlet de sidste 16 gange de har spillet :)

Match datoen er underordnet..bare i form af:

1. PlayerID2  4.20 pts
2. PlayerID1  3.80 pts
3. PlayerID9  3.70 pts
osv.
Avatar billede rane Nybegynder
18. november 2004 - 18:27 #3
Det er det med de sidste 16 matcher der er lidt tricky.
Avatar billede a1a1 Novice
18. november 2004 - 18:50 #4
hvilken database bruger du?
Avatar billede a1a1 Novice
18. november 2004 - 19:21 #5
select sum(matchpoint), playerid FROM tbl_playerGames
where exists (select distinct top 16 playerid, gamedate from tbl_playergames order by gamedate desc)
group by playerid

denne virker på mssqlserver

;o)
Avatar billede a1a1 Novice
18. november 2004 - 19:22 #6
select sum(matchpoint), playerid FROM tbl_playerGames
where exists (select distinct top 5 playerid, gamedate from tbl_playergames order by gamedate desc)
group by playerid
order by sum(matchpoint) desc

så får du dem i point rækkefølge
Avatar billede rane Nybegynder
18. november 2004 - 20:10 #7
Bruger access - jeg tester lige a1's eksempel :)
Avatar billede a1a1 Novice
18. november 2004 - 20:19 #8
det burde også du i access

;o)
Avatar billede rane Nybegynder
18. november 2004 - 20:19 #9
ai, det lader til at virke dit eksempel - men hvordan fikser jeg det så den finder de 16 seneste matcher som alle Players har spillet...og kun får den til at udregne points for de 16 matcher?
Avatar billede a1a1 Novice
18. november 2004 - 20:32 #10
virker det ikke?
Avatar billede a1a1 Novice
18. november 2004 - 20:38 #11
min regner da rigtigt :o)
Avatar billede a1a1 Novice
18. november 2004 - 20:41 #12
nææ jeg kan da godt se at der kan være et problem...

har ikke testet med så mange spil :o(
Avatar billede rane Nybegynder
18. november 2004 - 20:42 #13
jojo det virker grundlæggende. Men jeg forstår ikke rigtig hvor du trækker de 16 matcher ud henne. Har prøvet at ændre Top 16 til Top 1 - og der udregner den stadig for ALLE de matcher der er i tabellen...og ikke bare for den match der sidst er spillet.  Hvis du forstår? :)
Avatar billede a1a1 Novice
18. november 2004 - 21:16 #14
det er der problemet er ;o(

du kan lave et "hack" i asp noget ala

select * from playergames
while rs.eof <> true

totalpoint = 0
'hent hver spillers sidste 16 kampe
select top 16 playerid, matchpoint, gamedate
from tbl_playergames p
where playerid= rs("playerID")
order by gamedate desc
while rs2.eof <> true
totalpoint = totalpoint + rs2("matchpoint")
rs2.movenext

wend

indsæt rs("playerID) og totalpoint i en array

rs.movenext
wend

når alle spillere er blevet indsat i arrayen kan den så sorteres på "totalpoint", jeg ved ikke lige hvordan du kan sortere en array i alm. asp, men det er muligt

;o)
Avatar billede a1a1 Novice
18. november 2004 - 21:19 #15
Avatar billede stingbat Nybegynder
18. november 2004 - 22:42 #16
SELECT TOP 6 s.PlayerID, SUM(s.MatchPoints) AS Points FROM scores s WHERE s.ID IN (SELECT TOP 16 p.ID FROM scores p WHERE p.PlayerID = s.PlayerID ORDER BY p.MatchDate DESC) GROUP BY s.PlayerID ORDER BY 2 DESC
Avatar billede rane Nybegynder
18. november 2004 - 22:52 #17
Havde problemer med a1's løsning men stingbats virker bare helt perfekt! Men a1 du får alligevel lidt for dit besvær :)  Takker begge 2
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester