29. maj 2008 - 18:05Der er
8 kommentarer og 1 løsning
GROUP BY problem
Lidt GROUP BY problemer her. Har aldrig helt fattet hvordan det virker i MSSQL (i modsætning til MySQL).
Jeg ønsker kun at få én row pr BandID med den nyeste Track, lige meget hvad der findes i de andre felter. Hvordan opnår jeg det? (I MySQL ville man bare nøjes med at GROUP BY Band.BandID)
Problemet er at den ikke kun grouper på BandID, men også på de andre felter. Selvom et band har 3 tracks, vil jeg som sagt kun have en row pr band med bandets nyeste track. Jeg skal måske bygge det helt anderledes op?
Ja, jeg vil have det nyest track pr band, men man kan jo netop ikke group by et enkelt felt (BandID) som man kan i MySQL, hvorfor man får en row pr track og ikke pr band.
Nåh, men i mysql får du jo bare "tilfældige" værdier fra de felter, der ikke er nævnt i din GROUP BY. Du får ikke med sikkerhed det nyeste. Og den slags udtræk har ikke noget med SQL at gøre, og er at regne for en (gammel) fejl i Mysql.
SELECT P.SID, P.Name FROM Servers S INNER JOIN (SELECT P.SID, MAX(UID) AS [UID] FROM Players P GROUP BY P.SID) AS t1 ON S.SID = t1.SID INNER JOIN Players AS P ON t1.SID = P.SID AND t1.UID = P.UID
Følgende tager den Player med det højeste ID ud fra hvor Server. I mit tilfælde er højeste ID, den som er blevet tilføjet sidst ... det samme burde du kunne gøre ... du kan så fikse lidt rundt med table navne etc.
Tør ikke lave det med dine, da jeg sikkert alligevel overser et eller andet ...
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.