我想做一个非常简单的查询。
在SQL中是:
select * from table group by portfolio_id HAVING max(date)
在grails中我做了类似的事情:
def result = Table.executeQuery("from Table group by portfolio having max(date)")
但是我得到了一个意外的AST节点
我不知道,我读了一些文档,但我仍然无法得到它,为什么它不起作用。
更多细节中的错误消息
| Error 2014-01-29 17:20:15,400 [http-bio-8080-exec-8] ERROR hql.PARSER - <AST>:1:97: unexpected AST node: max
| Error 2014-01-29 17:20:15,426 [http-bio-8080-exec-8] ERROR errors.GrailsExceptionResolver - QuerySyntaxException occurred when processing request: [GET] /Lumen/Controller unexpected AST node: max near line 1, column 97 [select portfolio.id,date from com.gwm.lumen.Table group by portfolio.id having max(date)].
Stacktrace如下:
Message: unexpected AST node: max near line 1, column 97 [select portfolio.id,date from com.gwm.lumen.Table group by portfolio.id having max(date)]
答案 0 :(得分:1)
如果底层数据库是MySQL,则不能在max()
子句中使用聚合函数[本例{having
]。
有和的SQL函数和聚合函数是允许的 如果基础数据库支持子句,则按子句排序 (即不在MySQL中)。
@摘录取自Hibernate Docs on group by clause。
我不确定最新的MySQL方言是否支持它。