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
कम से कम महत्वपूर्ण विशेषता है, क्योंकि यह किसी भी निर्धारण में भाग नहीं लेती है कि किस पंक्ति में वापस आना है।