Grails按日期分组

6

我有一个带有日期属性的域类。

class Transaction {
    LocalDate time
    BigDecimal amount
}

如何按月分组查询所有交易的总和?我在GORM中找不到对日期范围进行分组的支持。


我不知道任何 GORM 特定的函数,但如果可以的话 - 您可以使用特定于数据库的函数。到目前为止,我已经在 MySQL 中使用了 GROUP BY MONTH(time) - aiolos
1个回答

18

在您的域类中添加一个基于公式的字段,用于截断日期:

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')
    }
}

2
注意:当使用CamelCase对领域属性进行命名时,在SQL语法中必须使用下划线来表示字段名称。例如,datePhotoTaken将变成date_photo_taken。 - skurt
@timeMonth 属性是否会在数据库中映射。 - Suganthan Madhavan Pillai
@Suganthan 这个属性在数据库中没有映射,但是你需要在约束条件中添加 timeMonth nullable: true 以避免验证错误。 - César
@César 谢谢,但它是在领域类中,所以 timeMonth 是否在 Grails 中有特殊保留? - Suganthan Madhavan Pillai
@an5607ky,示例中没有week属性。为什么不提出一个新问题并包含您的代码呢? - ataylor
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接