我有一个groovy多选标记(),我想在其中只显示一组行中包含MAX修订版的行。这是一篇用SQL编写的帖子:to select single row based on the max value in multiple rows?
我怎么能用groovy写作?我应该创建一个命名查询吗?
提前致谢。
答案 0 :(得分:0)
有多种方法可以实现这一目标。这些包括namedQueries,条件,分离标准甚至是HQL。这是namedQuery,它将获得所需:
static namedQueries = {
maxRevision {
eq 'revision', {
projections {
max 'revision'
}
}
//projections if needed
projections {
property 'name'
}
}
}
//controller
AppInfo.maxRevision().list()
使用分离标准,它将类似于:
AppInfo.withCriteria {
eq 'revision', {
projections {
max 'revision'
}
}
projections {
property 'name'
}
}
使用HQL:
select ai from AppInfo as ai
where ai.revision = (
select max(revision) from AppInfo
)
考虑以下域名类别:
class AppInfo {
String name
Integer revision
}
<强>更新强>
以上将给出所有修订的最大值。如果您正在寻找每组的最大值,那么您将不得不使用以下HQL:
AppInfo.executeQuery("""
select ai from AppInfo as ai
where ai.revision in (
select max(a.revision) from AppInfo as a
where a.name = ai.name
)
""")
这也可以写成标准。