2011-01-21 317 views
0

我有以下情况。使用JPA中的聚合函数

我想检索时间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);]) 

Couls有人指出错误?

回答

1

既然你查询引用两个不同的Bid情况下,他们应该有不同的别名:

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

自己没有尝试过,但从我看到的错误可能在你的子查询中。你说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

我试过以上,但有以下异常异常说明:错误编译查询[ SELECT b FROM Bid b WHERE b.bidAmt =(SELECT MAX(b.bidAmt)FROM Bid b WHERE b.lastUpdtTs BETWEEN?1 AND?2)],line 1,column 68:identification of variable [b]宣布为[Bid b] – cyclecount 2011-01-21 08:46:30

0

你得到了第二次错误是

识别多个声明 变量[B],先前声明为 [投标B]

从上面的错误,它似乎是多次声明B别名,所以删除别名B从子查询

试试下面的查询

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