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 その日付の およびsymbol 。
このインデックスをお勧めします:
CREATE UNIQUE INDEX test_table_idx
ON test_table (date, symbol, created_time, value)
カバーです インデックス(クエリに必要なすべての値があり、実際のテーブルにアクセスする必要がなく、すでに持っています)が、 created_timeに注意してください。 前に来る 値コード> 、したがって、データはすでにパーティション順であり、 value は、どの行を返すかの決定には関与しないため、最も重要度の低い属性です。