Hibernate [Query]Grails获取每个groupBy的最后一个条目

Hibernate [Query]Grails获取每个groupBy的最后一个条目,hibernate,grails,Hibernate,Grails,查询:我想知道如何在Grails中获取域实体的最新条目 问题域: class Parent { String name static hasMany = [children:Child] } class Child { String name Parent parent static belongsTo = [parent:Parent] } 数据模型 结果 我喜欢拉id为4和7的唱片 标准应该在哪里?给我每

查询:我想知道如何在Grails中获取域实体的最新条目

问题域:

 class Parent {

    String name
    static hasMany = [children:Child]
}


class Child {

        String name
        Parent parent
        static belongsTo = [parent:Parent]

    }
数据模型

结果

我喜欢拉id为4和7的唱片

标准应该在哪里?给我每个家长的最后记录,孩子的名字像“Rox%”

到目前为止我已经试过了

SELECT
MAX(id)
FROM child
WHERE parent_id IN(SELECT
                     p.id
                   FROM parent AS p
                     JOIN child AS c
                       ON (c.parent_id = p.id
                           AND c.name LIKE 'Rox%'))
 GROUP BY parent_id 

提前谢谢。

你的描述有点可疑,但我认为这正是你想要的:

def idList = [1,4]
def c = Parent.createCriteria()
def result = c.list {
  'in'("id", idList)
  children {
    like("name","Rox%")
  }
  groupProperty("id")
}
编辑:

当我把答案打出来的时候,你改变了你的整个问题,把它改成匹配的

最终编辑: 将排序添加到已编辑代码中的子项{},以获得所需的排序

           Parent.createCriteria().list(max:10,offset:0) {
                     'children' {
                                  like("name","Rox%")
                                  order("id","desc")
                                  groupProperty("id")
                                }


                     groupProperty("id")
              }

其中,两个条件查询在联接的基础上彼此不同。进一步阅读标准中的连接

为此,您需要一个。在Oracle中,这看起来像:

select max(id)
over(partition by parent_id, order by dateCreated)
from child
group by parent_id
在Hibernate/HQL中,无法在单个查询中完成此操作


您还希望获得记录9,对吗?

什么构成最后一条记录?这是基于什么?我用纯sql查询更新了这个问题。也许这有助于弄清楚我到底在找什么。谢谢你有什么理由用id来查找最新的记录,而不是用dateCreated时间戳?前者似乎容易出错。如果你的建议有效,我可以自由使用dateCreated!实际上,我需要为每个父对象插入最后一个子对象,因为它符合标准。此外,我张贴适当的答案与您的进一步建议,如'排序儿童'
select max(id)
over(partition by parent_id, order by dateCreated)
from child
group by parent_id