PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Neueste Nachrichten aus der Nachrichtentabelle anzeigen, nach Benutzer gruppieren

Dies sollte ziemlich effizient sein:

SELECT u.name, sub.*
FROM  (
   SELECT DISTINCT ON (1)
          m.message_from AS user_id
        , m.message AS last_message
   FROM   users    u
   JOIN   messages m ON m.message_to = u.id
   WHERE  u.name = 'Paul'   -- must be unique
   ORDER  BY 1, m.id DESC
   ) sub
JOIN  users u ON sub.user_id = u.id;

Berechnen Sie alle Benutzer mit der neuesten Nachricht in der Unterabfrage sub mit DISTINCT ON . Dann schließen Sie sich den users an ein zweites Mal, um den Namen aufzulösen.

Details für DISTINCT ON :
Erste Zeile in jeder GROUP BY-Gruppe auswählen?

Übrigens:Die Verwendung von "id" und "name" als Spaltennamen ist keine sehr hilfreiche Namenskonvention.