Hibernate [Query]Grails获取每个groupBy的最后一个条目
查询:我想知道如何在Grails中获取域实体的最新条目 问题域: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的唱片 标准应该在哪里?给我每
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