Чтобы ответить на этот вопрос, каждому продукту нужен какой-то идентификатор. Поскольку может быть несколько версий, нам нужно знать, «что это за продукт», я предполагаю, что product.id
отсутствует, поскольку это, вероятно, суррогатный ключ. Я выберу product.name
ради примера.
Вот один запрос для получения последней версии каждого продукта:
select p1 from Product p1 where
p1.timestamp >= all (
select p2.timestamp from Product p2 where
p2.name=p1.name
)
(Мой HQL немного ржавый, но я надеюсь, вы поняли суть.)
Хитрость заключается в самосоединении между подобными продуктами разного времени. p1
продукты были недавно изменены, чем p2
. Чтобы найти самый последний p1
, мы находим строки, в которых нет значений p2
, то есть нет продуктов, более свежих, чем p1
.
РЕДАКТИРОВАТЬ: я пересмотрел запрос - я недавно видел, как кто-то использовал синтаксис "on" в сообщении на форуме, но теперь я помню, что это не является допустимым HQL. Извините за это - у меня нет системы для тестирования. Теперь он использует коррелированный подзапрос, который функционирует так же, как JOIN.
Надеюсь, это поможет.