2012-05-03 49 views
1

我从我的“记录”表中提取记录。 “记录”表有很多列,其中有两列是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 

我上面试过,看起来记录提取不是最新的创建日期。 希望我的问题很明确

回答

0

这应该给你一个很好的起点在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

+1

不'MAX(rec.creation_date)'得到最大整个数据库;不是为了小组? – beerbajay

+0

@beerbajay好的......我修复了这个错误,以便每个'r'记录都会得到'r'client_id的最大创建日期。 –

1

只要保持你的查询,并添加一个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) 

看看This discussion