आप यहां जिस PostgreSQL सुविधा का उपयोग करना चाहते हैं, वह है DISTINCT ON
. इस क्वेरी को ActiveRecord के माध्यम से बनाने के दो बुनियादी तरीके हैं।
पहली विधि केवल :select
. निर्दिष्ट करना है और :order
विकल्प। यह बहुत अच्छा काम करता है जब आपके पास कोई :joins
. के साथ काफी सरल क्वेरी होती है या :include
।
Post.all(
:select => 'DISTINCT ON (date::date) *',
:order => 'date::date DESC, created_at DESC'
)
यदि आपके पास एक अधिक जटिल क्वेरी है जहां ActiveRecord अपना SELECT
उत्पन्न करता है खंड, आप लक्ष्य रिकॉर्ड का चयन करने के लिए एक सबक्वेरी का उपयोग कर सकते हैं।
Post.all(
:joins => 'INNER JOIN (SELECT DISTINCT ON (date::date) id FROM posts ORDER BY date::date DESC, created_at DESC) x ON x.id = posts.id'
)
ध्यान दें कि यह आपके डेटा के आधार पर पहली विधि की तुलना में थोड़ा धीमा हो सकता है। यदि आवश्यक हो तो मैं केवल इस विधि का उपयोग करूंगा। उत्पादन जैसे डेटा के साथ बेंचमार्क करना सुनिश्चित करें।