Mysql
 sql >> Base de données >  >> RDS >> Mysql

php mysql Group By pour obtenir le dernier enregistrement, pas le premier enregistrement

Si vous sélectionnez des attributs qui ne sont pas utilisés dans la clause group et qui ne sont pas des agrégats, le résultat n'est pas spécifié. C'est-à-dire vous ne savez pas à partir de quelles lignes les autres attributs sont sélectionnés. (La norme sql n'autorise pas de telles requêtes, mais MySQL est plus souple).

La requête doit alors être écrite, par ex. comme

SELECT post_id, forum_id, topic_id
FROM posts p
WHERE post_time =
  (SELECT max(post_time) FROM posts p2
   WHERE p2.topic_id = p.topic_id
   AND p2.forum_id = p.forum_id)
GROUP BY forum_id, topic_id, post_id
ORDER BY post_time DESC
LIMIT 5;

ou

SELECT post_id, forum_id, topic_id FROM posts
NATURAL JOIN
(SELECT forum_id, topic_id, max(post_time) AS post_time
 FROM posts
 GROUP BY forum_id, topic_id) p
ORDER BY post_time
LIMIT 5;