Du kan brug GROUP BY
, men det er vigtigt at forstå, hvordan det fungerer.
Når du bruger GROUP BY
en gruppe rækker er foldet sammen til én, og hvad der vises i de andre kolonner, der ikke bruges i din GROUP BY
klausul, bestemmes enten ved at bruge aggregerede funktioner, eller det er en tilfældig række ud af den gruppe. Du kan ikke være sikker på at få den række, der svarer til den viste række med MAX()
værdi eller hvilken som helst aggregeret funktion du brugte. Dette bliver især tydeligt, når du laver en forespørgsel som:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
"en anden_kolonne" kan tilhøre den række, der indeholder MIN()-værdien eller MAX()-værdien eller endda til en anden række, der slet ikke vises. I andre RDBMS end MySQL er det faktisk forbudt at vælge kolonner, der ikke bruger en aggregeret funktion eller ikke er opført i GROUP BY
klausul, blot for at forhindre, at brugere laver en fejl eller tror, de har fået det rigtige resultat.
Så i dit tilfælde ser det ud til, at du også ønsker at vise kolonnen "værdi". Af ovenstående årsager er juergen_d's svar forkert, fordi den ikke vælger "værdi", og hvis den ville, kan du ikke være sikker på, at det er den rigtige "værdi". Filipe Silvas svar er forkert, fordi det grupperer efter "værdi". At gøre dette vil i dit tilfælde faktisk returnere hele bordet. Romeshs svar er forkert, fordi du bruger to gange MAX()
funktionen vil give dig de maksimale værdier, naturligvis, men ikke den værdi, der svarer til datetime-værdien.
Så hvordan skal du gøre det? Her er 3 måder beskrevet . Lær dem ved at anvende dem selv. Det er ikke så svært :)