Hvis du vil have det sidste id
for hver asker
, så skal du bruge en aggregeret funktion:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Grunden til, at du fik det usædvanlige resultat, er fordi MySQL bruger en udvidelse til GROUP BY
som tillader elementer i en udvalgt liste at være ikke-aggregeret og ikke inkluderet i GROUP BY-sætningen. Dette kan dog føre til uventede resultater, fordi MySQL kan vælge de værdier, der returneres. (Se MySQL-udvidelser til GROUP BY
)
Fra MySQL Docs:
Hvis du nu havde andre kolonner, som du skal returnere fra tabellen, men ikke ønsker at tilføje dem til GROUP BY
på grund af de inkonsekvente resultater, du kunne få, kan du bruge en underforespørgsel til at gøre det. (Demo
)
select
q.Id,
q.asker,
q.other -- add other columns here
from questions q
inner join
(
-- get your values from the group by
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
) m
on q.id = m.id
order by q.id desc