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

Afficher les derniers messages du tableau des messages, grouper par utilisateur

Cela devrait être plutôt efficace :

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;

Calcule tous les utilisateurs avec le dernier message dans la sous-requête sub en utilisant DISTINCT ON . Rejoignez ensuite la table users une deuxième fois pour résoudre le nom.

Détails pour DISTINCT ON :
Sélectionner la première ligne de chaque groupe GROUP BY ?

À part :Utiliser "id" et "name" comme noms de colonne n'est pas une convention de dénomination très utile.