HQL-запрос с 2 столбцами Sub Join - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть таблица 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, но, похоже, хуже в плане производительности.

...