2015-01-06 14 views
5

this question'da açıklanana benzer bir durum var, çalıştığı aynı sorguyu yazdım, ancak bir jpql olarak yazmayı denediğimde sorgu, bir hata alıyorum.Adlandırılmış satırları MAX (sütun adı), başka bir sütun tarafından DISTINCT SELECT Sorgu Adlandırıldı

Benim sorgusu:

@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" 
      ) 

Hata:

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

Nasıl JPQL sorguyu düzgün yazmaya?

+0

çek veritabanı gui'ye bu sorguyu çalıştırmayı deneyin – silentprogrammer

cevap

6

this answer numaralı belgede belirtildiği gibi, JPQL'de bir alt sorgu yalnızca seçim ve tümcelerde gerçekleşebilir. Hibernate doc.

JPQL bir eşdeğer sorgu: Sorgu ve konsolda oluşturulan

"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" 
İlgili konular