Grails按日期分组

Odi*_*din 5 grails grails-orm

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

class Transaction {
    LocalDate time
    BigDecimal amount
}
Run Code Online (Sandbox Code Playgroud)

如何查询按月分组的所有事务的总和?我无法通过GORM中的日期范围找到对组的任何支持.

ata*_*lor 17

将基于公式的字段添加到域类中以获取截断日期:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以运行这样的查询:

Transaction.withCriteria {
    projections {
        sum('amount')
        groupProperty('timeMonth')
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:当对域属性使用 CamelCase 时,您必须在 sql 语法中使用下划线作为字段名称。例如 datePhotoTaken 将导致 date_photo_taken (2认同)