Вот таблица:
create table products (
product_id int,
new_price int,
change_date date,
primary key (product_id, change_date));
insert into products values
(1, 20, '2019-08-14'),
(2, 50, '2019-08-14'),
(1, 30, '2019-08-15'),
(1, 35, '2019-08-16'),
(2, 65, '2019-08-17'),
(3, 20, '2019-08-18');
вопрос: найдите new_price для последней даты изменения каждого product_id. Вот мое решение:
select a.product_id, a.new_price, b.change_date from products a join
(select product_id, max(change_date) change_date from products
group by product_id) b
on a.product_id = b.product_id and a.change_date = b.change_date;
оно работает как положено:
product_id | new_price | change_date
1 35 2019-08-16
2 65 2019-08-17
3 20 2019-08-18
Есть ли более эффективный способ решить эту проблему? это выглядит для меня простым вопросом, но я должен использовать подзапрос, чтобы решить его, поэтому я ищу лучшее решение. Я использую PostgreSQL. Спасибо