sql >> Databasteknik >  >> RDS >> PostgreSQL

Fråga för att få de senaste konversationerna för användarens inkorg

Som jag förstår måste du få det senaste meddelandet från konversationen per användare (av de senaste 10 senaste konversationerna)

Uppdatering: Jag har ändrat frågan för att få latest_conversation_message_id för varje användarkonversation

Frågan nedan får information om user_id = 2 , kan du ändra, users.id = 2 för att få det för någon annan användare

SQLFiddle , hoppas detta löser ditt syfte

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

Information: Frågan får det senaste meddelandet från varje konversation med någon annan användare, om user_id 2 , skickar ett meddelande till user_id 3 , det visas också, eftersom det indikerar början på en konversation. Det senaste meddelandet för varje konversation med någon annan användare visas



  1. Migrera data med Network_link

  2. WHERE-sats som använder värden som kan vara NULL

  3. Trunkera datum till räkenskapsår

  4. Anpassade formatsträngar för datum/tid som stöds av FORMAT() i SQL Server