У меня есть таблица price
:
| id | price | product_id | date | other_columns... |
У меня есть следующий запрос для возврата последней строки price
для каждого product_id
:
select p1.*
from price p1
right join (
select
p2.product_id,
p2.id,
max(p2.date)
from price p2
GROUP BY p2.product_id
) p2 ON p2.id = p1.id;
Когда я запускаю Explain
plan и бегаю по большому столу, это кажется наиболее эффективным способом достижения этого (поправьте меня, если я ошибаюсь!).
Мне нужно преобразовать это в HQL
для использования с Spring Data JPA
. Пока у меня есть подзапрос:
(SELECT p2.id, MAX(p2.date) FROM Price p2 GROUP BY p2.product)
Это, кажется, самая легкая часть. Как мне теперь присоединиться к этому, чтобы я мог получить последние версии Price
для каждого продукта?
Я пробовал другие запросы, например,
select
p1.*
from price p1
where p1.date = (
select max(p2.date)
from price p2
where p1.product_id = p2.product_id
)
Что гораздо проще преобразовать в HQL
, но, похоже, хуже в плане производительности.