在日期字段上使用max的JPQL查询

| 我需要查询以从一组记录中查找具有最新日期的记录。我已经尝试了很多东西,最近的是这样的: 从ImportedMessage消息中选择msg,msg.createdDate,其中msg.siteId =?1且msg.createdDate = max(msg.createdDate)按msg.createdDate分组 不幸的是,我尝试过的所有东西都产生了某种错误。我似乎得到最多的错误是: 原因:java.sql.SQLException:不在聚合函数或group by子句中: 语句中选择org.hsqldb.Expression@688c688c [选择importme.me.IMPORTED_MSG_ID作为 col_0_0_,导入为me0_.CREATED_DATE,作为col_1_0_,最大值(importedme0_.CREATED_DATE)为, col_2_0_,导入为me0_.IMPORTED_MSG_ID,作为IMPORTED1_1_,导入为me0_.CREATED_BY,作为 CREATED2_1_,导入为me0_。CREATED_DATE为CREATED3_1_,导入为me0_.UPDATED_BY,作为 UPDATED4_1_,导入为me0_.UPDATED_DATE为UPDATED5_1_,导入为me0_.IMPORT_TYPE为 IMPORT6_1_,导入为me0_.MESSAGE作为MESSAGE1_,导入为me0_.PROCESSED_FLAG, PROCESSED8_1_,从IMPORTED_MSG中导入的me0_.SITE_ID为SITE9_1_,其中importme0_ importedme0_.SITE_ID =?和importedme0_.CREATED_DATE =最大值(importedme0_.CREATED_DATE) 按importme0_.CREATED_DATE分组     在org.hsqldb.jdbc.Util.throwError(未知来源)     在org.hsqldb.jdbc.jdbcPreparedStatement处。(未知源)     在org.hsqldb.jdbc.jdbcConnection.prepareStatement(未知来源)     在org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)     在org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)     在org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)     在org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1616)     在org.hibernate.loader.Loader.doQuery(Loader.java:717)     在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)     在org.hibernate.loader.Loader.doList(Loader.java:2449)     ...另外52个 我相信这是在告诉我的是,我的select子句中没有适当的内容来允许组工作。但是,我尝试了各种组合,一切都导致了此错误。 有人可以告诉我我在这里做错了什么吗?     
已邀请:
好吧,我想主持人不会费心阅读将答案上移的编辑内容: 发问者对查询意图的评论: \“我有一个表,该表包含一个数据元素列表(id,消息(字符串),siteId(字符串),createdDate(时间戳记)。我需要做的是通过siteId选择),然后在该组中找到记录最新的createdDate。\“ 解:
Query query = entityManagerReference.createQuery(
\"SELECT msg FROM ImportedMessage msg \" 
+ \"WHERE msg.siteId = :siteId ORDER BY msg.createDate desc\");

query.setParameter(\"siteId\", 12345);
query.setMaxResults(1);
    
使用Oracle10方言的Hibernate将此转换为WHERE ROWNUM <= 1。     

要回复问题请先登录注册