grails - 在GORM中按周/月/年分组

标签 grails gorm

我有一个域类(最小化):-

class Expense {
    Date dateOfExpense
    int amount
}

我试图获取按支出日期的周/月/年分组的金额总和。
在grails doc http://grails.org/doc/latest/guide/GORM.html中引用“sqlGroupProjection”方法,

我尝试使用以下代码:-
def results = c {
    between("dateOfExpense", fromDate, toDate)              
    projections {
         sqlGroupProjection 'dateOfExpense,sum(amount) as summed',       
        'MONTH(dateOfExpense)',['date','summed'],[DATE,NUMBER]                  
    }
}

引发异常:
 No such property: DATE for class: grails.orm.HibernateCriteriaBuilder. Stacktrace follows:
 Message: No such property: DATE for class: grails.orm.HibernateCriteriaBuilder

请提出一种使用sqlGroupProjection方法的方法

最佳答案

  • 在域类中分别为周,月和年创建三个新的数字字段。这些字段不会映射到表中的列。
  • 为这三个字段提供静态映射。
    static mapping = {
         //provide the exact column name of the date field
         week formula('WEEK(DATE_OF_EXPENSE)')    
         month formula('MONTH(DATE_OF_EXPENSE)')
         year formula ('YEAR(DATE_OF_EXPENSE)')
    }
    

  • 现在我们可以使用
    def results = c.list {
      between("dateOfExpense", fromDate, toDate) 
      projections {
        switch(groupBy){
            case "week":
               groupProperty('year')
               groupProperty('month')
               groupProperty('week') 
            break;
            case "month"
               groupProperty('year')
               groupProperty('month')
            break;
            case "year":
               groupProperty('year')
            break;
        }        
        sum('amount')
      }
    }
    

    关于grails - 在GORM中按周/月/年分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083310/

    相关文章:

    sqlite - SQLite数据库中Grails域类中无法解析的日期

    grails - 创建域类时出现ScriptExitException错误[grails]

    grails - 在Groovy中使用JSoup获取mp3/pdf文件

    grails - Grails-如何使一段代码仅在功能测试期间运行

    hibernate - 列表中一个域对象上的StaleObjectStateException会影响所有剩余的更新

    grails - 如何通过使用grails的findAll查询按数据降序排序?

    grails - Grails在数据库优先模式下访问日期等于的数据

    grails - Grails动态查找器能否被应用程序代码破坏?

    mongodb - 指向无效属性-MongoDB&Grails 3.3+

    sql-server - 使用旧式数据库SQL Server的Grails