在Grails 2.1应用程序中,我无法获得标准查询,就像我手写的sql一样。
所以这里是一些背景信息:
该表位于报告数据库中,并具有以下ddl:
completed_case表格列
只要该案例的值发生更改,就会向该表中添加一行,因此每个caseId通常会有> 1行。
我的任务是在completedDate范围内找到每个案例的第一行。我有一些hacky sql似乎能得到我想要的值:
select * from dbo.completed_case where id in
(select min(id)
from dbo.completed_case cci
group by case_id
having ((min(completed_date) > convert(datetime, 'Oct 19 2012 11:01AM', 100)) and
(min(completed_date) < convert(datetime, 'Oct 21 2012 11:01AM', 100)))) and
status = 'DIAGNOSED'
但我不确定如何将此查询转换为Grails / Gorm CriteriaQuery。我是猜测以下(使用分离的标准来进行子选择),但似乎DetachedCriteria没有groupPropery()所以我有点迷失。
无论如何,这是我的猜测,包括对groupProperty的无效调用:
HibernateCriteriaBuilder criteria = CompletedCase.reports.createCriteria()
def results = criteria {
eqAll("id", new DetachedCriteria(CompletedCase).build {
projections {
min("id")
}
groupProperty("caseId") //XXX this method doesn't exist on DetachedCriteria
between("completedDate", startDate.toDate(), endDate.toDate())
})
eq("status", "DIAGNOSED")
fetchMode 'AssociatedTable', FetchMode.JOIN
}
有没有办法使用Gorm / Grails提供的接口生成此查询?
谢谢
答案 0 :(得分:1)
我刚用hql做过。
select cci from CompletedCase as cci where id in (
select min(id) from CompletedCase group by caseId
) and cci.completedDate > :startDate and cci.completedDate < :endDate and cci.status = :status
order by cci.id