В приложении Grails 2.1 у меня возникли проблемы с получением запроса на критерии, который будет вести себя как у какого-то написанного вручную sql.Отдельный критерий Grails Query и предложение «group by» и «having»
Так вот некоторая справочная информация:
В таблице в отчетном дб и имеет следующий DDL:
completed_case столбцы таблицы
- ID
- completedDate
- caseState
- caseId (это поле не является уникальным)
- состояние
- некоторые другие столбцы
- CustomerName, другие столбцы данных
Строка добавляется к этой таблице всякий раз, когда значение для этого случая изменения, поэтому часто бывают> 1 строк на caseId.
Мне было поручено найти первую строку для каждого случая в пределах диапазона doneDate. У меня есть некоторый 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. Я был угадывая следующее (используя отложенный критерий для выбора sub), но кажется, что у 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?
спасибо