Mam 2 tabele: dystanse (półmaraton, 10km, itd.) oraz wyniki zawodnika na poszczególnych dystansach.
Chcę znaleźć najlepsze wyniki dla każdego z dystansów.
Kwerenda grupująca po dystansach z funkcją agregująca min(czas) musi być oparta na danych z więcej niż 1 tabeli powiązanych relacją LEFT JOIN.
Taka kwerenda daje te najkrótsze czasy (z funkcji min(*) w klauzuli SELECT) oraz pola z klauzuli GROUP BY (w tym wypadku dystans).
Nie potrafię natomiast uzupełnić tego zestawienia o identyfikatory rekordów dla których znaleziono te najkrótsze czasy oraz inne pola z tabeli dowiązanej przez JOIN (tabela dystansów).
Chodzi o to, że jeśli do klauzuli SELECT dodam coś co nie jest ani argumentem funkcji agregującej ani parametrem grupowania z klauzuli GROUP BY to w wynikach pojawia się w tym polu przypadkowa (a w każdym razie błędna) wielkość.
Mam taki kod:
SELECT `results`.user, `races`.raceTypeId, `raceSelection`.nominalDistance, min(`results`.time) AS personalBest, count(*) AS numberOfResults /* Potrzebne są także dodatkowe poniższe pola: `results`.resultId, (identyfikator rekordu z najkrótszym czasem) `competitions`.name, (nazwa i data zawodów kiedy w których osiągnięto ten najlepszy wynik) `competitions`.date ale w ten sposób to nie ma prawa działać :-( */ FROM `results` LEFT JOIN `races` USING (raceId) LEFT JOIN `raceSelection` USING (raceSelectionId) LEFT JOIN `competitions` USING (competitionId) GROUP BY `results`.user, `races`.raceTypeId, `raceSelection`.nominalDistance
Pozdrawiam
Bart