Кажется, вам просто нужна самая последняя дата для каждой цены продукта:
select product_id, price, max(date)
from t
group by product_id, price;
Я думал, вы хотели знать, когда новые цены начали действовать. Для этого вы можете использовать lag()
, чтобы узнать, когда цена изменится, и оставить только эти строки:
select t.*
from (select t.*,
lag(price) over (partition by product_id order by date) as prev_price
from t
) t
where prev_price is null or prev_price <> price;