Meddelande

Minska
No announcement yet.

MIN() i JOIN men fortfarande dubbletter

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • MIN() i JOIN men fortfarande dubbletter

    Hej!

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

    [kod]Resultat
    ResId
    ResUser
    ResDate
    ResDistance
    ResTime

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

    Försöker med JOIN på resultat och MIN, för att få den bästa tiden:
    sql:
    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!
    //Micke Andersson
    Hemsida | Kontakta
    ----------------------
    "Det är svårt att vara ödmjuk när man vet att man är bäst".

  • #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.
    //Micke Andersson
    Hemsida | Kontakta
    ----------------------
    "Det är svårt att vara ödmjuk när man vet att man är bäst".

    Kommentera


    • #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.
      Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

      Kommentera


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

        Fungerar som det ska nu.
        //Micke Andersson
        Hemsida | Kontakta
        ----------------------
        "Det är svårt att vara ödmjuk när man vet att man är bäst".

        Kommentera

        Working...
        X