Grails 2.1 アプリケーションで、条件クエリを手書きの SQL のように動作させるのに問題があります。
背景情報は次のとおりです。
テーブルはレポート データベースにあり、次の ddl があります。
completed_case テーブル列
- ID
- 完了日
- ケース状態
- caseId (このフィールドは一意ではありません)
- 州
- 他のいくつかの列
- customerName、その他のデータ列
そのケースの値が変更されるたびに、このテーブルに行が追加されるため、多くの場合、caseId ごとに 1 行以上あります。
私は、completedDate の範囲内で各ケースの最初の行を見つけることを任されています。私は、私が望む値を取得しているように見えるハック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 が提供するインターフェースを使用してこのクエリを生成する方法はありますか?
ありがとう