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

Показване на най-новите съобщения от таблицата със съобщения, групиране по потребител

Това трябва да е доста ефективно:

SELECT u.name, sub.*
FROM  (
   SELECT DISTINCT ON (1)
          m.message_from AS user_id
        , m.message AS last_message
   FROM   users    u
   JOIN   messages m ON m.message_to = u.id
   WHERE  u.name = 'Paul'   -- must be unique
   ORDER  BY 1, m.id DESC
   ) sub
JOIN  users u ON sub.user_id = u.id;

Изчислете всички потребители с последното съобщение в подзаявката sub използвайки DISTINCT ON . След това се присъединете към таблицата users втори път, за да разрешите името.

Подробности за DISTINCT ON :
Изберете първия ред във всяка група GROUP BY?

Настрана:Използването на „id“ и „name“ като имена на колони не е много полезна конвенция за именуване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULL елементи се губят при предаване на резултат от unnest()

  2. JBoss регистрира драйвера на Postgres, който не е съвместим с JDBC

  3. Postgres на високо ниво работи със скорост INSERT/UPDATE?

  4. Postgres now() срещу 'now' във функцията

  5. Представяне на бъдещо време в PostgreSQL