@bodrich

Возможно ли переделать запрос без использования подзапросов?

create table test
(
	id bigserial primary key,
	price_id integer not null,
	value integer not null,
	time_action timestamp with time zone
)

select distinct price_id, (select value from test t2 where t1.price_id=t2.price_id order by time_action desc limit 1)  from test t1


Суть задачи вытащить все уникальные price_id из таблицы test с последним по времени value. Можно ли это как-то сделать без подзапросов для ускорения запроса?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
select distinct on (price_id), price_id,value  from tablename order by price_id, time_action desc


Если на каждый price_id много строк - то вы неверно думаете что запрос замедляет.
select price_id, value from prices as t1 lateral (select value from test t2 where t1.id=t2.price_id order by time_action desc limit 1) on true;

Если таблицы prices нет - то сооружать loose index scan вручную.
Всё разумеется с подходящим индексом.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
select price_id,max(time_action) from test group by price_id;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы