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.