Si vous voulez le dernier id
pour chaque asker
, alors vous devez utiliser une fonction d'agrégation :
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
La raison pour laquelle vous obteniez le résultat inhabituel est que MySQL utilise une extension pour GROUP BY
qui permet aux éléments d'une liste de sélection d'être non agrégés et non inclus dans la clause GROUP BY. Cela peut cependant conduire à des résultats inattendus car MySQL peut choisir les valeurs renvoyées. (Voir Extensions MySQL pour GROUP BY
)
À partir de la documentation MySQL :
Maintenant, si vous avez d'autres colonnes que vous devez renvoyer à partir de la table, mais que vous ne voulez pas les ajouter au GROUP BY
en raison des résultats incohérents que vous pourriez obtenir, vous pouvez utiliser une sous-requête pour le faire. (Démo
)
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