查询:我想知道如何在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
提前感谢。
答案 0 :(得分:0)
你的描述有点阴暗,但我认为这就是你想要的:
def idList = [1,4]
def c = Parent.createCriteria()
def result = c.list {
'in'("id", idList)
children {
like("name","Rox%")
}
groupProperty("id")
}
编辑:
当我输入我的答案时,你改变了整个问题,改变了它以匹配。
最终编辑: 在已编辑的代码中向子项{}添加排序以获得所需的排序。
答案 1 :(得分:0)
Parent.createCriteria().list(max:10,offset:0) {
'children' {
like("name","Rox%")
order("id","desc")
groupProperty("id")
}
groupProperty("id")
}
或
Parent.createCriteria().list(max:10,offset:0) {
createAlias("children", "ac")
like("ac.name","Rox%")
order("ac.id","desc")
groupProperty("ac.id")
groupProperty("id")
}
其中两个条件查询在连接的基础上彼此不同。进一步阅读标准中的连接 http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html
答案 2 :(得分:0)
为此,您需要SQL window function。在Oracle中,这看起来像:
select max(id)
over(partition by parent_id, order by dateCreated)
from child
group by parent_id
在Hibernate / HQL中的单个查询中无法做到这一点。
(你也想获得#9的记录,对吗?)