PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kembalikan catatan yang berbeda pada satu kolom tetapi urutkan berdasarkan kolom lain

DISTINCT ON

Jika Anda menggunakan DISTINCT ON , Anda memerlukan subkueri untuk itu:

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

Urutan di subquery harus sesuai dengan kolom di DISTINCT ON klausa, jadi Anda harus membungkusnya dalam kueri luar untuk sampai pada urutan pengurutan yang Anda inginkan.

Alternatif dengan row_number()

Cerita serupa, Anda juga memerlukan subquery:

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;

Mungkin juga lebih lambat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara menangkap kesalahan fungsi pg_connect ()?

  2. Psycopg / Postgres :Koneksi hang out secara acak

  3. Bisakah PostgreSQL memiliki batasan keunikan pada elemen array?

  4. sqlalchemy simetris banyak ke satu persahabatan

  5. Rails 5 form_for dengan array kotak centang