我有一个普通的多选择标记(),我只想显示一组行中具有MAX修订版的行。这是SQL中的帖子:to select single row based on the max value in multiple rows?
我如何用groovy写作?我应该创建一个命名查询吗?
提前致谢。
最佳答案
有多种方法可以实现此目的。这些包括命名查询,条件,分离条件甚至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
)
""")
这也可以写为条件。
关于grails - Grails命名查询以基于多行中的最大值选择行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22486258/