sql >> Database >  >> RDS >> PostgreSQL

Toon de laatste berichten uit de berichtentabel, groeperen op gebruiker

Dit zou vrij efficiënt moeten zijn:

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;

Bereken alle gebruikers met het laatste bericht in de subquery sub met behulp van DISTINCT ON . Sluit je dan aan bij totaal users een tweede keer om de naam op te lossen.

Details voor DISTINCT ON :
Selecteer de eerste rij in elke GROUP BY-groep?

Terzijde:het gebruik van "id" en "name" als kolomnamen is geen erg handige naamgevingsconventie.



  1. Haal de dagnaam uit een datum in PostgreSQL

  2. Kan geen verbinding maken met een van de opgegeven MySQL-hosts bij het controleren van de verbinding

  3. Hoe hoofdletters naar kleine letters te converteren in SQL Server - LOWER()

  4. Geautomatiseerde databaseback-up en -herstel implementeren met standaardmiddelen