2014-02-11 1 views
0

Я хочу получить список регистраций UserProfile за день. Объект DomainProfile домена сохраняет свойство Date creationDate. Я попыталсяЭлементы подсчета Gorm group by day без времени

def results = UserProfile.executeQuery('select u.creationDate, count(u) from UserProfile as u group by u.creationDate') 
println results 

, который, очевидно, не то, что мне нужно, потому что данные (уже), которые хранятся с полным временем в нем.

Любой ресурс подкованных решение будет соответствовать: прогнозы, HQL, ...

Thnks

ответ

2

Я использую HQL отливать функцию:

def results = UserProfile.executeQuery(""" 
    select cast(u.creationDate as date), count(u) 
    from UserProfile as u 
    group by cast(u.creationDate as date) 
""") 

Базовая база данных должна поддерживать ANSI бросание (... как ...) синтаксис для этого, чтобы работать, который в случае PostgreSQL, MySQL, Oracle, SQL Сервер и многие другие СУБД

0

ломаются даты к day, month и year затем игнорировать timestamp.

Это должно дать вам то, что вам нужно.

def query = 
""" 
select new map(day(u.creationDate) as day, 
       month(u.creationDate) as month, 
       year(u.creationDate) as year, 
       count(u) as count) 
     from UserProfile as u 
     group by day(u.creationDate), 
       month(u.creationDate), 
       year(u.creationDate) 
""" 

//If you do not worry about dates any more then this should be enough 
def results = UserProfile.executeQuery(query) 

//Or create date string which can be parsed later 
def refinedresults = 
    results.collect { [ "$it.year-$it.month-$it.day" : it.count ] } 

//Or parse it right here 
def refinedresults = 
    results.collect { 
     [ Date.parse('yyyy-MM-dd', "$it.year-$it.month-$it.day") : it.count ] 
    } 
0

Вы можете определить "derived" property отображаются в виде формулы для извлечения даты части даты и время. Точная формула будет отличаться в зависимости от того, что DB вы используете, для MySQL вы можете использовать что-то вроде

Date creationDay // not sure exactly what type this needs to be, it may need 
       // to be java.sql.Date instead of java.util.Date 

static mapping = { 
    creationDay formula: 'DATE(creation_date)' 
} 

(формула использует БД имена столбцов, а не Горм имена свойств). Теперь вы можете группировать creationDay вместо creationDate, и он должен делать то, что вам нужно.

Или вместо «даты» вы можете использовать отдельные поля для года, месяца и дня, как это предложено в другом ответе, и я думаю, что эти функции действительны как для H2, так и для MySQL.

+0

Зависимость от диалекта была причиной того, что я не рассматривал этот вариант. Ты прав. :) – dmahapatro

 Смежные вопросы

  • Нет связанных вопросов^_^