sql >> Databasteknik >  >> RDS >> PostgreSQL

Visa senaste meddelanden från meddelandetabell, grupp efter användare

Detta borde vara ganska effektivt:

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;

Beräkna alla användare med det senaste meddelandet i underfrågan sub med DISTINCT ON . Gå sedan med i totala users en andra gång för att lösa namnet.

Detaljer för DISTINCT ON :
Välj första raden i varje GROUP BY-grupp?

Bortsett från:Att använda "id" och "name" som kolumnnamn är inte en särskilt användbar namnkonvention.



  1. MYSQL:Där klausulen är tvetydig

  2. Hur tolkar du en frågas förklara plan?

  3. GREATEST() Funktion i PostgreSQL

  4. Hur tar man bort flikar i början och slutet av varchar-fältet i MySQL?