簡體   English   中英

命名查詢以選擇具有MAX(列名稱)的行,使用另一列的DISTINCT

[英]Named Query to SELECT rows with MAX(column name), DISTINCT by another column

我有一個類似於這個問題中描述的情況 ,我寫了一個相同的查詢,但是當我嘗試將其寫為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中正確編寫查詢?

本回答所述,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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM