sql >> Databáze >  >> RDS >> PostgreSQL

Dotaz pro získání posledních konverzací pro uživatelskou doručenou poštu

Jak jsem pochopil, potřebujete získat nejnovější zprávu z konverzace pro každého uživatele (z posledních 10 posledních konverzací)

Aktualizace: Upravil jsem dotaz, abych získal latest_conversation_message_id pro každou uživatelskou konverzaci

Níže uvedený dotaz získá podrobnosti pro user_id = 2 , můžete upravit, users.id = 2 získat jej pro jakéhokoli jiného uživatele

SQLFiddle , doufám, že to vyřeší váš účel

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

Informace: Dotaz získá nejnovější zprávu z každé konverzace s jakýmkoli jiným uživatelem, If user_id 2 , odešle zprávu na user_id 3 , zobrazí se také, protože označuje začátek konverzace. Zobrazí se nejnovější zpráva z každé konverzace s jakýmkoli jiným uživatelem



  1. JDBC PreparedStatement - Použití stejného argumentu, je to možné?

  2. 2 cizí klíče odkazující na stejný primární klíč v MySQL

  3. DriverManager žádný vhodný ovladač mysql

  4. Jaký je rozdíl mezi utf8_unicode_ci a utf8_unicode_520_ci