在 Grails 2.1 应用程序中,我无法让条件查询表现得像我拥有的一些手写 sql。
所以-这里有一些背景信息:
该表位于报告数据库中,并具有以下 ddl:
completed_case 表列
- ID
- 完成日期
- 案例状态
- caseId(此字段不唯一)
- 状态
- 其他一些列
- customerName,其他数据列
每当该案例的值发生更改时,就会向此表添加一行,因此每个 caseId 通常有 >1 行。
我的任务是在完成日期范围内为每个案例找到第一行。我有一些 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 提供的接口生成这个查询?
谢谢