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

Zwróć rekordy różne w jednej kolumnie, ale posortuj według innej kolumny

DISTINCT ON

Jeśli używasz DISTINCT ON , potrzebujesz do tego podzapytania:

SELECT *
FROM  (
   SELECT DISTINCT ON (conversation_id) *
   FROM   message t
   ORDER  BY conversation_id, created_at DESC
   ) sub
ORDER BY created_at DESC;

Kolejność w podzapytaniu musi zgadzać się z kolumnami w DISTINCT ON klauzuli, więc musisz umieścić ją w zewnętrznym zapytaniu, aby uzyskać pożądaną kolejność sortowania.

Alternatywnie z row_number()

Podobna historia, potrzebujesz również podzapytania:

SELECT id, sender_id, receiver_id, conversation_id, subject, body, created_at
FROM  (
   SELECT *, row_number() OVER (PARTITION BY conversation_id
                                ORDER BY created_at DESC) AS rn
   FROM   message t
   ) sub
WHERE  rn = 1
ORDER  BY created_at DESC;

Również prawdopodobnie wolniej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można uzyskać dostęp do starej wersji wiersza w Postgresie, który nie został odkurzony?

  2. Filtr zapytań Django używający dużej liczby identyfikatorów w Postgres DB

  3. Wyciszanie postgresu loguje spam w railach 3 logi

  4. pg_dump:nieprawidłowa opcja -- i podczas migracji

  5. Połącz wiele wierszy wyników z jednej kolumny w jedną, pogrupuj według innej kolumny