PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Visualizza gli ultimi messaggi dalla tabella dei messaggi, raggruppati per utente

Questo dovrebbe essere piuttosto efficiente:

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;

Calcola tutti gli utenti con l'ultimo messaggio nella sottoquery sub utilizzando DISTINCT ON . Quindi unisciti a users atable una seconda volta per risolvere il nome.

Dettagli per DISTINCT ON :
Seleziona la prima riga in ogni gruppo GROUP BY?

A parte:l'uso di "id" e "name" come nomi di colonna non è una convenzione di denominazione molto utile.