Grails命名查询,根据多行中的最大值选择行

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', {

我有一个groovy multi-select标记(),其中我只想显示一组行中具有MAX-revision的行。下面是一篇用SQL实现的帖子:

如何使用groovy编写?我应该创建一个命名查询吗


提前感谢。

实现这一点有多种方法。这些包括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')}