Kom ihåg mig?
Home Menu

Menu


SQL group by

Ämnesverktyg Visningsalternativ
Oläst 2008-09-25, 09:08 #1
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
Jag har en tabell innehållandes lopp som går runtom i Sverige (västsverige mestadels, faktiskt) och en tabell innehållandes mina resultat.

Jag har försökt att filtrera ut så att jag bara får ut de tiderna jag haft bäst (minst tid) på 10KM och gruppera på år för att få ut årsbästa.

Så här skrev jag:
Kod:
SELECT MIN(`r`.`time`), `e`.`name`, `e`.`length`, `e`.`date` 
`myDate`, YEAR(`e`.`date`) `myYear` FROM `results` `r` 
INNER JOIN `events` `e` ON `e`.`ID`= `r`.`eventID` 
WHERE `r`.`userID`=1 AND `e`.`length`=10 
GROUP BY YEAR(`e`.`date`)
ORDER BY `myYear` ASC, `r`.`time` ASC
Tiderna som kommer ut stämmer, men inte loppen som tiderna skall vara knutna till.

Kod:
MIN(`r`.`time`) name  length myDate myYear
00:41:45 Sylvesterloppet 10.0 2004-12-31 2004
00:42:58 Göteborg Cross Country 10.0 2005-04-09 2005
00:40:54 Göteborgs Cross Country 10.0 2006-04-29 2006
00:42:00 Blodomloppet Göteborg 10.0 2007-05-30 2007
00:40:48 Lerumsloppet 	10.0 2008-04-26 2008


Så här skall resultatet bli (jag har själv tagit ut dessa rader manuellt)
Kod:
time 	name 	length myDate myYear
00:41:45 Sylvesterloppet 10.0 2004-12-31 2004
00:42:58 Lerumsloppet 	10.0 2005-04-23 2005
00:40:54 Blodomloppet Göteborg 10.0 2006-05-31 2006
00:42:00 Sylvesterloppet 10.0 2007-12-31 2007
00:40:48 Blodomloppet Göteborg 10.0 2008-05-28 2008

Någon som har en idé vad det kan vara som är galet?

Det är MySQL5 som körs.
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-25, 10:26 #2
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Min() plockar bara ut minvärdet och inte en specifik rad där minvärdet återfinns. Därför kan du inte använde det för en koppling.
När du gör en group by så plockar mysql ut rader efter hur de råkar ligga i tabellen och inte efter nån slags ordning som man kan ange. Ett sätt att komma runt detta är att använda en subquery som tar fram den ordning som du vill ha, eller endast den rad som du vill ha med.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-25, 10:56 #3
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
Så först göra en loop där jag får ut de år jag har resultat på 10Km och sedan ta ut den bästa (lägsta) tiden det året, borde fungera. Dock hade det varit optimalt att bara ha en query.
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-25, 12:48 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by allstars@Sep 25 2008, 10:56
Så först göra en loop där jag får ut de år jag har resultat på 10Km och sedan ta ut den bästa (lägsta) tiden det året, borde fungera. Dock hade det varit optimalt att bara ha en query.
Det ska nog inte vara något problem att göra det till en sql-fråga, loopar är ju lite korkat. (Med MySQL5 kan man också använda subqueries osv. (som Magnus_A nämnde) till att baka ihop enorma frågor.)

Med typ SELECT MIN(tid) AS topptid, evenemang, år GROUP BY år,evenemang eventuellt med någon HAVING borde du väl kunna få fram vad du letar efter (har inte riktigt förstått vad du vill få ut). Det är lite jobbigt att läsa querien med alla "flärpar" - finns det någon speciell anledning till att ha det så (förutom att du använder funktionsnamn som fältnamn)?
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-25, 13:54 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Finns ett exempel i manualen:
http://dev.mysql.com/doc/refman/5.0/en/exa...-group-row.html
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-26, 10:27 #6
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
spännande... Tack!
allstars är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 02:45.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017