Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails Hql或从组中选择具有最大值的行的条件_Grails_Hql_Gorm_Criteria - Fatal编程技术网

Grails Hql或从组中选择具有最大值的行的条件

Grails Hql或从组中选择具有最大值的行的条件,grails,hql,gorm,criteria,Grails,Hql,Gorm,Criteria,我需要编写一个标准或HQL,为每个interfaceCode只选择最新版本的InterfaceVersion。版本由majorVersion.minorVersion.editVersion组成 例如: 界面外翻表: id | interface_code_id | major_version | minor_version | edit_version ---|-------------------|---------------|---------------|-------------

我需要编写一个标准或HQL,为每个interfaceCode只选择最新版本的InterfaceVersion。版本由majorVersion.minorVersion.editVersion组成

例如:

界面外翻表:

id | interface_code_id | major_version | minor_version | edit_version
---|-------------------|---------------|---------------|-------------
 1 |                 1 |             1 |             1 |            6
 2 |                 1 |             1 |             5 |            0
 3 |                 2 |             1 |             0 |            0
 4 |                 2 |             0 |             1 |            0
 5 |                 2 |             2 |             0 |            1
 6 |                 2 |             1 |             3 |            6
预期结果将是:

InterfaceVersions instances with ids [2, 5]
我已将此GORM域类简化:

InterfaceCode{
    int id
    String code

    static hasMany = [ versionList: InterfaceVersion]
}

InterfaceVersion{
    int id
    InterfaceCode interfaceCode
    int majorVersion
    int minorVersion
    int editVersion

    static belongsTo = [ InterfaceCode ]

    static constraints = {
        interfaceCode(unique:['majorVersion','minorVersion','editVersion'])
    }
}
到目前为止,我已经能够提出以下sql:

SELECT t1.*
FROM Interface_Version  t1
  Left Outer Join Interface_Version  T2
    On (T1.Interface_Code_Id = T2.Interface_Code_Id And 
      (T1.Major_Version < T2.Major_Version Or 
      (T1.Major_Version = T2.Major_Version And T1.Minor_Version < T2.Minor_Version) Or 
      (T1.Major_Version = T2.Major_Version And T1.Minor_Version = T2.Minor_Version And T1.Edit_Version < T2.Edit_Version ) )
      )
WHERE t2.id IS NULL

你能不能把这个sql转换成hql或Criteria,或者想出更好的方法?

我搞不懂,你说的最新版本是什么意思?你能提供一个简单的例子吗?我在问题中添加了一个例子,所以最新的版本是基于major_version字段的?如果有版本1.1.5和1.1.1,而最新的版本是1.1.5,那么你需要所有三个版本major、minor、edit来找出哪个interfaceVersion实例是最新的。如果你已经使用的SQL,我会简单地使用它。它不会像HQL或Criteria那样为您返回hibernate域对象。如果您需要域对象本身,我会将您的查询放在一个服务中,以找到您想要的对象的ID,然后将它们作为域对象获取。一些阅读:和