1

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 が提供するインターフェースを使用してこのクエリを生成する方法はありますか?

ありがとう

4

1 に答える 1

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
于 2013-05-23T20:39:56.190 に答える