यह बल्कि कुशल होना चाहिए:
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;
सबक्वेरी sub
. में नवीनतम संदेश के साथ सभी उपयोगकर्ताओं की गणना करें DISTINCT ON
. का उपयोग करके . फिर टोटल users
. से जुड़ें नाम हल करने के लिए दूसरी बार।
DISTINCT ON
. के लिए विवरण :
प्रत्येक GROUP BY समूह में पहली पंक्ति चुनें?
इसके अलावा:"id" और "name" को कॉलम नामों के रूप में उपयोग करना बहुत उपयोगी नामकरण परंपरा नहीं है।