PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक कॉलम पर अलग-अलग रिकॉर्ड लौटाएं लेकिन दूसरे कॉलम द्वारा ऑर्डर करें

DISTINCT ON

अगर आप DISTINCT चालू , उसके लिए आपको एक सबक्वेरी चाहिए:

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

सबक्वेरी में ऑर्डर DISTINCT ON . के कॉलम से सहमत होना चाहिए खंड, इसलिए आपको अपने वांछित क्रम पर पहुंचने के लिए इसे बाहरी क्वेरी में लपेटना होगा।

row_number() के साथ वैकल्पिक

इसी तरह की कहानी, आपको एक सबक्वेरी भी चाहिए:

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;

शायद धीमी भी।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql आउटपुट में नोटिस अक्षम करें

  2. pgSql के साथ समान कॉलम की पिछली पंक्ति को कैसे क्वेरी करें

  3. एक सरणी का Nth तत्व प्राप्त करें जो string_to_array () फ़ंक्शन से लौटाता है

  4. संबंधों में TypeORM OneToMany फ़िल्टर परिणाम पर प्रभाव नहीं डालता

  5. PostgreSQL फ़ंक्शन के तर्क के रूप में तालिका