Нетривиальный запрос данных в Grails - PullRequest
2 голосов
/ 23 мая 2011

представьте следующую проблему в grails

у вас есть некоторый класс домена журнала аудита с числовыми свойствами.Например, класс, в котором записано текущее значение выгрузки вашего проекта Scrum:

class burndown {
    Date createDate
    int  value
}

Ваши проекты используют этот класс для хранения текущего значения выгрузки каждый раз, когда вы обновляете задачу - это означает, что несколько раз в день.

Теперь вы хотите построить диаграмму с последним сохраненным значением для каждого дня .

Оператор SQL для этого может выглядеть примерно так:

select 
  * 
from 
  table 
where 
  id in (
    select 
      max(id) 
    from 
      table 
    group by 
      TO_CHAR(create_date,'yyyyddmm')
  )

Теперь мой вопрос: как вы делаете такой запрос в Grails?

Если мне нужно использовать такой оператор SQL, как избежать того, чтобы имена таблиц и столбцов были жестко закодированы в этом операторе?

PS: этот код не был протестирован.только что записано в моем уме ... но я думаю, вы чувствуете, что я хочу спросить

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Для начала вы, скорее всего, захотите переименовать createDate в dateCreated, поскольку Grails автоматически устанавливает его для вас, если вы используете это имя, поэтому вам нужно только указать значения для «реальных» свойств класса.,Это не важно для этой проблемы.

Если вы хотите, чтобы последний элемент был создан по дате создания, есть несколько разных способов сделать это, но я думаю, что это имеет смысл:

def mostRecent = Burndown.listOrderByDateCreated(max: 1, order: 'desc')[0]

или если вы сохраните свое имя

def mostRecent = Burndown.listOrderByCreateDate(max: 1, order: 'desc')[0]

Это описано в http://grails.org/doc/latest/ - это прекрасное руководство, достойное прочтения.

1 голос
/ 23 мая 2011

Не пользователь Grails, поэтому ниже должен быть исправлен соответствующим Grails'ist

Если домены связаны, попробуйте что-то вроде:

Foo.findAllInList(Bar.list([group:'create_date']))
...