Конструкция запроса JPA / Hibernate

Я беру записи из своей таблицы «записей». таблица "запись" имеет много столбцов, два из которых

  1. client_id, отображение внешнего ключа в клиентскую таблицу.
  2. Creation_date, дата создания записи

Я хотел бы сделать запрос по этой таблице, но я хотел бы получить только одну запись для каждого клиента (предпочтение имеет последняя запись creation_date).

Будет ли работать следующее?

select r.id,r.xx,r.yy
group by(r.client_id),r.creation_date 
from record r 
order by creation_date desc

Я пробовал выше, и кажется, что полученные записи не относятся к последним датам создания. Надеюсь, мой вопрос ясен


person Subin Sebastian    schedule 03.05.2012    source источник


Ответы (2)


Это должно дать вам хорошую отправную точку в HQL.

from Record as r inner join fetch r.client
where r.creation_date > (
    select max(rec.creation_date) from Record rec
    where rec.client.client_id = r.client.client_id
)

Это, конечно, предполагает, что ваша Запись имеет ссылку на своего родительского клиента с именем client.

person maple_shaft    schedule 03.05.2012
comment
Не max(rec.creation_date) получает максимум для всей БД; не для группы? - person beerbajay; 03.05.2012
comment
@beerbajay Хороший улов ... Я исправил это так, чтобы для каждой записи r он получал максимальную дату создания для r client_id. - person maple_shaft; 03.05.2012

Просто сохраните свой запрос и добавьте условие WHERE:

SELECT r.id,r.xx,r.yy
GROUP BY(r.client_id)
FROM record r
WHERE r.creation_date = (SELECT MAX(creation_date) FROM record tmp WHERE tmp.client_id = r.client_id )

Взгляните на это обсуждение

person M3HD1    schedule 03.05.2012