webForumDet fria alternativet

MIN() i JOIN men fortfarande dubbletter

3 svar · 1 437 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Hej!

Har probelm med att få ut bästa tid för en distans, tillsammans med JOIN och tre tabeller:

[b]Resultat[/b]
ResId
ResUser
ResDate
ResDistance
ResTime

[b]Distanser[/b]
DistId (= Resultat.ResDistance)
DistName

Försöker med JOIN på resultat och MIN, för att få den bästa tiden:

SELECT 
`ResDate`, `ResDistance`, t2.`Result` AS `Result`, `DistName`
FROM `competition_result` t
  INNER JOIN 
  ( SELECT `ResId`, MIN(`ResTime`) `Result`
	FROM `competition_result` 
	WHERE `ResUser` = :UserId 
	GROUP BY `ResDistance` 
  ) t2
  ON t.`ResId` = t2.`ResId` 
    INNER JOIN `competition_distance` 
    ON t.`ResDistance` = `DistId` 
WHERE t.`ResUser` = :UserId 
ORDER BY `Distance`, `ResTime`, `ResDate`

Problemet är att i resultatet förekommer samma distans (med olika tid) flera gånger, samt att datumet (ResDate) kommer från fel rad. D.v.s tiden är rätt, men den väljer ett datum från samma distans fast en annan tid.

Förslag på hur jag löser det här? Känns rätt straight forward och jag förstår inte varför det inte fungerar.

Tacksam för hjälp!

MickeA.comMedlem sedan feb. 20034 441 inlägg
#2

Kan tillägga att i tabellen resultat kan det förekomma flera rader där samma användare har flera tider med samma datum för samma distans. Då ska den givetsvis välja den rad med BÄST (MIN()) tid.

prplxrMedlem sedan juni 2012582 inlägg
#3

MIN() ger dig inte en rad med det lägsta värdet i ett fält, det ger dig alla rader som matchar din where-sats med den skillnaden att alla rader kommer MIN()-värdet i ResTime.

Överväg att istället sortera på ResTime först och sätt LIMIT 1.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#4

Löste det enligt den här principen: http://stackoverflow.com/a/10122446

Fungerar som det ska nu.

137 ms totalt · 3 externa anrop · v20260731065814-full.ca5a5675
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)