Использование агрегатных функций в JPA - PullRequest
0 голосов
/ 21 января 2011

У меня следующая ситуация.

Я хочу получить список предложений между временем t1 и временем t2. Затем из этого списка я хочу получить выигрышную ставку, т.е. максимальную цену предложения.

Я написал следующий запрос JPA.

SELECT b FROM Bid b WHERE b.bidAmt = (SELECT MAX(b.bidAmt) FROM b WHERE b.lastUpdtTs BETWEEN ?1 AND ?2)

Но я получаю следующее исключение.

Exception Description: Syntax error parsing the query [SELECT b FROM Bid b WHERE b.bidAmt = (SELECT MAX(b.bidAmt) FROM b WHERE b.lastUpdtTs BETWEEN ?1 AND ?2)], line 1, column 64: unexpected token [b].
Internal Exception: NoViableAltException(66!=[1108:1: subselectIdentificationVariableDeclaration[List varDecls] : ( identificationVariableDeclaration[varDecls] | n= associationPathExpression ( AS )? i= IDENT | n= collectionMemberDeclaration );])

Неужели кто-то указывает на ошибку?

Ответы [ 3 ]

1 голос
/ 21 января 2011

Поскольку вы запрашиваете ссылки на два разных экземпляра Bid, они должны иметь разные псевдонимы:

SELECT b FROM Bid b WHERE b.bidAmt = 
     (SELECT MAX(bb.bidAmt) FROM Bid bb WHERE bb.lastUpdtTs BETWEEN ?1 AND ?2) 
1 голос
/ 21 января 2011

Сам не пробовал, но из того, что я вижу, ошибка могла быть в вашем подзапросеВы говорите FROM b, но это должно быть FROM Bid b.Итак, весь запрос выглядит так:

SELECT b FROM Bid b WHERE b.bidAmt = (SELECT MAX(b.bidAmt) FROM Bid b WHERE b.lastUpdtTs BETWEEN ?1 AND ?2)
0 голосов
/ 21 января 2011

Ошибка, которую вы получили во второй раз

многократное декларирование личности переменная [b], ранее объявленная как [Ставка b]

Из вышеприведенной ошибки кажется, что псевдоним b объявлен несколько раз, поэтому удалите псевдоним b из подзапроса

Попробуйте следующий запрос

SELECT b FROM Bid b WHERE b.bidAmt =
    (SELECT MAX(bidAmt) FROM Bid WHERE lastUpdtTs BETWEEN ?1 AND ?2)
...