Grails命名查询,根据多行中的最大值选择行
我有一个groovy multi-select标记(),其中我只想显示一组行中具有MAX-revision的行。下面是一篇用SQL实现的帖子: 如何使用groovy编写?我应该创建一个命名查询吗Grails命名查询,根据多行中的最大值选择行,grails,groovy,gorm,grails-2.0,grails-controller,Grails,Groovy,Gorm,Grails 2.0,Grails Controller,我有一个groovy multi-select标记(),其中我只想显示一组行中具有MAX-revision的行。下面是一篇用SQL实现的帖子: 如何使用groovy编写?我应该创建一个命名查询吗 提前感谢。实现这一点有多种方法。这些包括namedquery、criteria、分离的criteria甚至HQL。以下是namedQuery,它将获得所需的内容: static namedQueries = { maxRevision { eq 'revision', {
提前感谢。实现这一点有多种方法。这些包括namedquery、criteria、分离的criteria甚至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
)
""")
这也可以作为一个标准。谢谢@dmahapatro。。我尝试了命名查询。但是,它只返回一行。我想选择AppInfo中版本号最高的所有名称…谢谢。。我得到了一个类似的SQL代码,但性能很差。。下面的@Jonathan Leffler链接提供了一个更好的SQL解决方案。。。我试图写上面提到的最后一个查询,结果是(不起作用,它给出了所有记录)。有没有解决这个问题的方法@dmahapatro?def join=AppInfo.list{groupProperty(“name”)max('revision')}