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

PostgreSQL - सिंटैक्स द्वारा DISTINCT ON और GROUP

सभी स्तंभों का चयन करने में सक्षम होने के लिए और न केवल object_id और MAX(event_timestamp) , आप DISTINCT ON . का उपयोग कर सकते हैं

SELECT DISTINCT ON (object_id) 
    object_id, event_timestamp    ---, more columns
FROM test_select 
ORDER BY object_id, event_timestamp DESC ;

यदि आप चाहते हैं कि परिणाम event_timestamp DESC by द्वारा क्रमित हों और object_id . द्वारा नहीं , आपको इसे किसी व्युत्पन्न तालिका या CTE में शामिल करना होगा:

SELECT *
FROM 
  ( SELECT DISTINCT ON (object_id) 
        object_id, event_timestamp    ---, more columns
    FROM test_select 
    ORDER BY object_id, event_timestamp DESC 
  ) AS t
ORDER BY event_timestamp DESC ;

वैकल्पिक रूप से, आप विंडो फ़ंक्शन का उपयोग कर सकते हैं, जैसे ROW_NUMBER() :

WITH cte AS
  ( SELECT ROW_NUMBER() OVER (PARTITION BY object_id 
                              ORDER BY event_timestamp DESC) 
             AS rn, 
           object_id, event_timestamp    ---, more columns
    FROM test_select 
  )
SELECT object_id, event_timestamp    ---, more columns
FROM cte
WHERE rn = 1
ORDER BY event_timestamp DESC ;

या कुल MAX() OVER . के साथ :

WITH cte AS
  ( SELECT MAX(event_timestamp) OVER (PARTITION BY object_id) 
             AS max_event_timestamp, 
           object_id, event_timestamp    ---, more columns
    FROM test_select 
  )
SELECT object_id, event_timestamp    ---, more columns
FROM cte
WHERE event_timestamp = max_event_timestamp
ORDER BY event_timestamp 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. Postgresql में पंक्ति को कई पंक्तियों में कैसे विभाजित करें?

  2. त्रुटि:ऑपरेटर मौजूद नहीं है:संख्यात्मक ~* अज्ञात

  3. postgreSQL फ़ंक्शन कॉल पैकेट

  4. मेरे मामले में क्या गलत है?

  5. बिल्ड समय पर डॉकर छवियों के बीच नेटवर्क कैसे करें?