2015-01-06 17 views
5

Tôi có một trường hợp tương tự như được mô tả trong this question, tôi đã viết một truy vấn giống hệt nhau, nhưng khi tôi cố gắng viết nó dưới dạng jpql truy vấn, tôi gặp lỗi.Được đặt tên truy vấn SELECT hàng với MAX (tên cột), DISTINCT bởi cột khác

truy vấn của tôi:

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

Lỗi:

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

Làm thế nào để viết các truy vấn đúng cách trong JPQL?

+0

kiểm tra truy vấn tạo ra trong giao diện điều khiển của bạn và cố gắng chạy truy vấn đến cơ sở dữ liệu của bạn gui – silentprogrammer

Trả lời

6

Như đã nêu trong this answer, truy vấn phụ trong JPQL chỉ có thể xảy ra trong các điều khoản được chọn và ở đâu. Hibernate doc.

Một truy vấn tương đương trong JPQL là:

"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" 
Các vấn đề liên quan