【问题标题】:JPA/Hibernate query constructionJPA/Hibernate 查询构造
【发布时间】:2012-05-03 13:46:04
【问题描述】:

我正在从我的“记录”表中获取记录。 “记录”表有很多列,其中

  1. client_id,外键映射到客户端表。
  2. 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

我在上面尝试过,似乎获取的记录不是最新的创建日期。 希望我的问题很清楚

【问题讨论】:

    标签: java hibernate jpql


    【解决方案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

    【讨论】:

      【解决方案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
      )
      

      这当然假设您的 Record 有一个对其父 Client 的引用,称为 client

      【讨论】:

      • max(rec.creation_date) 获得整个数据库的最大值;不适合团体?
      • @beerbajay 很好...我修复了它,以便对于r 的每条记录,它将获得r client_id 的最大创建日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 2015-09-18
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多