sql >> Database >  >> RDS >> PostgreSQL

Query om laatste gesprekken voor gebruikersinbox te krijgen

Zoals ik heb begrepen, moet je het laatste bericht van het gesprek per gebruiker ontvangen (van de laatste 10 laatste gesprekken)

Bijwerken: Ik heb de query aangepast om de latest_conversation_message_id . te krijgen voor elk gebruikersgesprek

De onderstaande query haalt de details op voor user_id = 2 , u kunt wijzigen, users.id = 2 om het voor een andere gebruiker te krijgen

SQLFiddle , ik hoop dat dit je doel oplost

SELECT
    user_id, 
    users.name, 
    users2.name as sent_from_or_sent_to,
    subquery.text as latest_message_of_conversation
FROM
    users
    JOIN
    (
    SELECT
        text,
        row_number() OVER ( PARTITION BY user_id + recipient_id ORDER BY id DESC) AS row_num,
        user_id,
        recipient_id,
        id
    FROM
        private_messages
    GROUP BY
        id,
        recipient_id,
        user_id,
        text
    ) AS subquery ON ( ( subquery.user_id = users.id OR subquery.recipient_id = users.id)  AND row_num = 1 )
    JOIN users as users2 ON ( users2.id = CASE WHEN users.id = subquery.user_id THEN subquery.recipient_id ELSE subquery.user_id END )
WHERE
    users.id = 2
ORDER BY
    subquery.id DESC
LIMIT 10

Informatie: De query krijgt het laatste bericht van elk gesprek met een andere gebruiker, If user_id 2 , stuurt een bericht naar user_id 3 , ook dat wordt weergegeven, omdat het het begin van een gesprek aangeeft. Het laatste bericht van elk gesprek met een andere gebruiker wordt weergegeven



  1. Verbind de python-app met een database met behulp van centos 7

  2. SQL-script om invoegscript te maken

  3. De netwerkadapter kon geen verbinding tot stand brengen bij het verbinden met Oracle DB

  4. Hoe kan ik met succes oude mysql-php-code herschrijven met verouderde mysql_*-functies?