Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL ruft den letzten Datensatz für die Gruppe ab

GROUP BY soll mit Aggregatfunktionen verwendet werden, ansonsten wird willkürlich eine Zeile pro Gruppe ausgewählt. Ihre Lösung (oben und in Ihrer Selbstantwort) funktioniert, weil MySQL die erste Zeile jeder Gruppe zu behalten scheint, aber Sie können nicht garantieren, dass dies immer geschieht.

Sie können das Datum des letzten Kommentars für jede post_id abrufen so.

select post_id, MAX(datetime) as latest from post_comments group by post_id

Verwenden Sie es, um den neuesten Kommentar auszuwählen:

SELECT t1.* FROM post_comments AS t1
JOIN (
    SELECT post_id, MAX(datetime) AS latest FROM post_comments GROUP BY post_id
) AS t2
ON t1.post_id = t2.post_id AND t1.datetime = t2.latest