2012-05-04 9 views
4

私はdate-propertyを持つドメインクラスを持っています。Grailsグループの日付順

class Transaction { 
    LocalDate time 
    BigDecimal amount 
} 

月ごとにグループ化されたすべてのトランザクションの合計を照会するにはどうすればよいですか?私はGORMの日付範囲でグループのサポートを見つけることができません。

+0

を私はGORMを知りませんあなたのためにそれがOKならば、データベース固有の機能を使用することができます。私は今までMySQLのために 'GROUP BY MONTH(time)'を使ってきました。 – aiolos

答えて

16

切り捨て日のためにあなたのドメインクラスに数式ベースのフィールドを追加します。

class Transaction { 
    LocalTime time 
    BigDecimal amount 
    String timeMonth 

    static mapping = { 
     timeMonth formula: "FORMATDATETIME(time, 'yyyy-MM')" // h2 sql 
     //timeMonth formula: "DATE_FORMAT(time, '%Y-%m')" // mysql sql 
    } 
} 

を次にあなたがこのようなクエリを実行できるようになります:

Transaction.withCriteria { 
    projections { 
     sum('amount') 
     groupProperty('timeMonth') 
    } 
} 
+1

注意:CamelCaseをドメインプロパティーに使用する場合は、SQL構文のフィールド名にアンダースコアを使用する必要があります。例えばdatePhotoTakenはdate_photo_takenになります – skurt

+0

@timeMonthプロパティtimeMonthがdbにマップされるかどうかを確認します –

+0

@Suganthanプロパティはdbにマップされませんが、検証エラーを回避するために制約に 'timeMonth nullable:true'を追加する必要があります。 –