PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyświetlaj najnowsze wiadomości z tabeli wiadomości, grupuj według użytkownika

To powinno być dość wydajne:

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;

Oblicz wszystkich użytkowników z najnowszą wiadomością w podzapytaniu sub przy użyciu DISTINCT ON . Następnie dołącz do wszystkich users po raz drugi, aby rozwiązać nazwę.

Szczegóły dla DISTINCT ON :
Czy wybrać pierwszy wiersz w każdej grupie GROUP BY?

Na marginesie:używanie „id” i „name” jako nazw kolumn nie jest zbyt pomocną konwencją nazewnictwa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zredukować liczbę połączeń za pomocą SQLAlchemy + postgreSQL?

  2. Tworzenie i usuwanie bazy danych PostgreSQL na Ubuntu 16.04

  3. Problemy z tabelą krzyżową/pivotem w PostgreSQL

  4. Agregat produktów w PostgreSQL

  5. Wiele WSTAWEK w jednym stole i wiele do wielu tabel