java - 命名查询以选择具有 MAX(列名)的行,另一列为 DISTINCT

标签 java mysql hibernate jpa jpql

我有一个类似于 this question 中描述的案例,我写了一个相同的有效查询,但是当我尝试将其编写为 jpql 命名查询时,出现错误。

我的查询:

@NamedQuery(
            name = "findRankingsBetween",
            query = "SELECT rt FROM Rankingtable rt " +
                        "INNER JOIN " +
                            "(SELECT teamId, MAX(lastupdate) as MaxDateTime " +
                            "FROM Rankingtable " +
                            "GROUP BY teamId) grouped " +
                        "ON rt.teamId = grouped.teamId " +
                        "AND rt.lastupdate = grouped.MaxDateTime " +
                    "WHERE rt.lastupdate BETWEEN :from AND :to"
            )

错误:

Error in named query: findRankingsBetween: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 79

如何在jpql中正确编写查询?

最佳答案

this answer 中所述,JPQL 中的子查询只能出现在 select 和 where 子句中。 Hibernate doc .

JPQL 中的等效查询是:

"SELECT rt FROM Rankingtable rt " +
"WHERE rt.lastupdate = (SELECT MAX(r2.lastupdate) " +
                       "FROM Rankingtable r2 " +
                       "WHERE r2.teamid = rt.teamid) " +
"AND rt.lastupdate BETWEEN :from AND :to"

关于java - 命名查询以选择具有 MAX(列名)的行,另一列为 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794582/

相关文章:

mysql - 带有 Tomcat 的 HTTP servlet

java - Hibernate更新实体不知道主键

mysql - 在codeigniter中增加子元素数据库获取

java - 如何解决补充 Maven 子模块中的循环依赖?

java - 为什么 Java 使用的内核比我要求的多?

Java代码 "NumberFormat nf = NumberFormat.getInstance();"

MySQL:多重连接及其对总和的影响

java - Hibernate 复杂的唯一约束

java - Spring数据jpa中save和saveAndFlush的区别

java - Android studio v2.2.2 error(27,17) 无法解析junit :junit4. 12