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

Vis de seneste beskeder fra beskedtabellen, grupper efter bruger

Dette burde være ret 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;

Beregn alle brugere med den seneste besked i underforespørgslen sub ved hjælp af DISTINCT ON . Slut dig derefter til alle mulige users en anden gang for at løse navnet.

Detaljer for DISTINCT ON :
Vælg første række i hver GROUP BY-gruppe?

Bortset fra:Brug af "id" og "navn" som kolonnenavne er ikke en særlig nyttig navnekonvention.



  1. Opret indlejret json-objekt ved hjælp af php mysql

  2. Hvordan bruger du mvc-mini-profiler med Entity Framework 4.1

  3. Hvilken funktion skal jeg bruge til at hash kodeord i MySQL?

  4. Sådan opretter du en parameterforespørgsel i Access