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

Postgresql के साथ कुशल नवीनतम रिकॉर्ड क्वेरी

यदि आप अपना डेटा मॉडल नहीं बदलना चाहते हैं, तो आप DISTINCT ON . का उपयोग कर सकते हैं "ए" में प्रत्येक प्रविष्टि के लिए तालिका "बी" से नवीनतम रिकॉर्ड लाने के लिए:

SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC

यदि आप क्वेरी में "सॉर्ट" से बचना चाहते हैं, तो इस तरह का एक इंडेक्स जोड़ना हो सकता है आपकी मदद करें, लेकिन मुझे यकीन नहीं है:

CREATE INDEX b_id_date ON b (id, date DESC)

SELECT DISTINCT ON (b.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY b.id, b.date DESC

वैकल्पिक रूप से, यदि आप तालिका "ए" से रिकॉर्ड को किसी तरह से सॉर्ट करना चाहते हैं:

SELECT DISTINCT ON (sort_column, a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY sort_column, a.id, b.date DESC

वैकल्पिक दृष्टिकोण

हालांकि, उपरोक्त सभी प्रश्नों को अभी भी सभी संदर्भित पंक्तियों को पढ़ने की आवश्यकता है तालिका "बी" से, इसलिए यदि आपके पास बहुत अधिक डेटा है, तो यह अभी भी बहुत धीमा हो सकता है।

आप एक नई तालिका बना सकते हैं, जिसमें प्रत्येक a.id . के लिए केवल नवीनतम "b" रिकॉर्ड हो -- या यहां तक ​​कि उन स्तंभों को "a" तालिका में ही ले जाएं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका, फ़ील्ड और स्कीमा नाम का उपयोग करके संदर्भित तालिका का नाम खोजें

  2. आप Postgres . में तार कैसे उद्धृत करते हैं?

  3. पोस्टग्रेज के साथ अलग-अलग सरणी तत्व कैसे प्राप्त करें?

  4. वॉल्यूम का उपयोग करके डॉक किए गए पोस्टग्रेज डेटाबेस में डेटा को कैसे बनाए रखें

  5. हेरोकू त्रुटि:एक्शन व्यू ::टेम्पलेट ::त्रुटि (#<संदेश:0x007fc9df016930> के लिए अपरिभाषित विधि 'कैप्चा')