PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Заявка за получаване на последните разговори за входящата кутия на потребителя

Доколкото разбирам, трябва да получите най-новото съобщение от разговора за всеки потребител (от последните 10 последни разговора)

Актуализация: Промених заявката, за да получа latest_conversation_message_id за всеки потребителски разговор

Заявката по-долу получава подробности за user_id = 2 , можете да промените, users.id = 2 за да го получите за всеки друг потребител

SQLFiddle , надявам се това да реши целта ви

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

Информация: Заявката получава най-новото съобщение за всеки разговор с всеки друг потребител, ако user_id 2 , изпраща съобщение до user_id 3 , това също се показва, тъй като показва началото на разговор. Показва се последното съобщение от всеки разговор с всеки друг потребител



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преброяване по най-ранната дата, намерена от вътрешно присъединяване?

  2. Hibernate + PostgreSQL:връзката не съществува - SQL грешка:0, SQLState:42P01

  3. Локална инсталация/изпълнение на база данни на Postgres

  4. Подвижен брой редове в интервал от време

  5. Как да превърнете json масив в редове в postgres