sql >> Database teknologi >  >> RDS >> PostgreSQL

Forespørgsel for at få sidste samtaler til brugerindbakke

Som jeg forstår, skal du få den seneste besked fra samtalen pr. bruger (af de sidste 10 seneste samtaler)

Opdatering: Jeg har ændret forespørgslen for at få latest_conversation_message_id for hver brugersamtale

Nedenstående forespørgsel får detaljerne for user_id = 2 , kan du ændre, users.id = 2 for at få det til enhver anden bruger

SQLFiddle , håber dette løser dit formål

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

Oplysninger: Forespørgslen får den seneste besked fra hver samtale med enhver anden bruger, hvis user_id 2 , sender en besked til user_id 3 , vises det også, da det angiver starten på en samtale. Den seneste besked fra hver samtale med enhver anden bruger vises



  1. Parsing af XML-data ved hjælp af php til at lægge i mysql-database

  2. Sådan opdaterer du en graf ved hjælp af matplotlib

  3. Hvorfor giver min lagrede procedure fejlen 'Ingen data - nul rækker hentet, valgt eller behandlet', når jeg har en WHERE i sætningen?

  4. Hvordan tilføjer man et variabelt antal timer til en dato i PostgreSQL?