我有一个普通的多选择标记(),我只想显示一组行中具有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/

10-13 05:08