webForumDet fria alternativet

Group by med max() som påverkar andra kolumner?

Databaser & SQL

1 svar · 389 visningar · startad av Kristianstad

Medlem sedan dec. 2002841 inlägg
Frågan#1

Låt säga att jag har en tabell som ser ut så här:
| ID | Förnamn | Efternamn | Datum
| 1 | Anna | Andersson | 2012-02-04
| 2 | Anders | Andersson | 2012-02-05
| 3 | Gustav | Andersson | 2012-02-01
| 4 | Peter | Persson | 2012-02-06
| 5 | Gustav | Persson | 2012-02-03

Jag vill skapa en SQL-fråga (MySQL) som ger följande resultat:
| ID | Förnamn | Efternamn | Datum
| 3 | Gustav | Andersson | 2012-02-01
| 5 | Gustav | Persson | 2012-02-03

Jag vill alltså gruppera Efternamn och visa alla kolumner där id är maximum. Lite som SELECT *, MAX(ID) FROM tabell GROUP BY Efternamn, fast där uppgifterna om Förnamn och Datum ska tas från den rad där id är max.

Hur gör man bäst?

Medlem sedan mars 20034 471 inlägg
#2

Om jag inte minns fel kan man numera anväda subfrågor i MySQL? I så fall borde följande funka:


SELECT
  *
FROM
   MyTable T
   JOIN (
      SELECT
         Efternamn,
         MAX(id) as MaxID
      FROM
         MyTable
      GROUP BY
         Efternamn
   ) M ON T.id = M.MaxID AND T.Efternamn = M.Efternamn

Annars får du lagra subfrågan i en temptabell och använda denna istället i huvudfrågan. Glöm inte ta bort temptabellen då!

249 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)