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

पोस्टग्रेएसक्यूएल DISTINCT BY भिन्न ऑर्डर के साथ चालू है

दस्तावेज़ीकरण कहता है:

<ब्लॉकक्वॉट>

DISTINCT ON (अभिव्यक्ति [,...] ) पंक्तियों के प्रत्येक सेट की केवल पहली पंक्ति रखता है जहाँ दिए गए व्यंजकों का मूल्यांकन बराबर होता है। [...] ध्यान दें कि प्रत्येक सेट की "पहली पंक्ति" अप्रत्याशित है जब तक कि यह सुनिश्चित करने के लिए ORDER BY का उपयोग नहीं किया जाता है कि वांछित पंक्ति पहले दिखाई देती है। [...] व्यंजकों पर DISTINCT का मिलान सबसे बाईं ओर के ORDER BY व्यंजकों से होना चाहिए।

आधिकारिक दस्तावेज

तो आपको address_id जोड़ना होगा द्वारा आदेश के लिए।

वैकल्पिक रूप से, यदि आप पूरी पंक्ति की तलाश कर रहे हैं जिसमें प्रत्येक address_id के लिए सबसे हाल ही में खरीदा गया उत्पाद है और उस परिणाम को purchased_at . द्वारा क्रमबद्ध किया गया तो आप प्रति समूह एक सबसे बड़ी N समस्या को हल करने का प्रयास कर रहे हैं जिसे निम्नलिखित तरीकों से हल किया जा सकता है:

सामान्य समाधान जो अधिकांश DBMS में काम करना चाहिए:

SELECT t1.* FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC

@Hkf के उत्तर पर आधारित एक अधिक PostgreSQL-उन्मुख समाधान:

SELECT * FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_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. Postgresql में एक अपरर्ट प्रदर्शन करते समय आंशिक सूचकांक का उपयोग संघर्ष खंड में नहीं किया जाता है

  2. PostgreSQL डेटाबेस से छवि प्रदर्शित करना, bytea

  3. PostgreSQL फ़ंक्शन पैरामीटर के रूप में तालिका का नाम

  4. कैसे timeofday () PostgreSQL में काम करता है

  5. रेल प्रवासन:PostgreSQL पर Bigint विफल हो रहा है?