sql - Fastest way to select row with max value at primary key field -
sql - Fastest way to select row with max value at primary key field -
i have got table:
create table spots( datetime timestamp, market varchar(15), spot numeric(10, 5), primary key (market, datetime) );
i need select row p_market
maximum value of datetime
filed, less or equal p_datetime
, have got 2 opts this:
select * spots market = p_market , datetime = ( select max(datetime) spots market = p_market , datetime <= p_datetime );
and
select * spots market = p_market , datetime <= p_datetime order datetime descending limit 1;
so, question - variant improve performance perspective.
postgres supports window function, should theoretically calculated incrementally rows processed, should provide performance boost on big info sets:
select * (select *, rank() on (order datetime desc) rk spots market = p_market , datetime <= p_datetime) t spots rk = 1
sql performance postgresql greatest-n-per-group
Comments
Post a Comment