Postgres विंडो फ़ंक्शन का समर्थन करता है जो इस स्थिति के अनुकूल हो:
select date, symbol, value, created_time
from (select *,
rank() over (partition by date, symbol order by created_time desc) as rownum
from test_table) x
where rownum = 1
date . के हर संयोजन के लिए , symbol , यह क्वेरी value लौटाती है और created_time उच्चतम वाली पंक्ति से (अर्थात अंतिम ) created_time उस date . का और symbol ।
मैं इस सूचकांक का सुझाव दूंगा:
CREATE UNIQUE INDEX test_table_idx
ON test_table (date, symbol, created_time, value)
यह एक आवरण है अनुक्रमणिका (आपके पास क्वेरी के लिए आवश्यक सभी मान हैं, वास्तविक तालिका तक पहुँचने की आवश्यकता को समाप्त करते हुए, और जो आपके पास पहले से था), लेकिन ध्यान दें कि created_time पहले . आता है value , इसलिए डेटा पहले से ही अपने विभाजन क्रम में है, और value कम से कम महत्वपूर्ण विशेषता है, क्योंकि यह किसी भी निर्धारण में भाग नहीं लेती है कि किस पंक्ति में वापस आना है।