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.