我有7个汇总表,每周一天。 txn_summary_monday ... txn_summary_tuesday等等......
表存储事务计算每个日期(每个星期一,每个星期二......等等),位置,用户,资源等。
这是表格的示例域
class TxnSummFri {
Long id
Transaction trans
Users guser
Resources gresource
Integer txnCount
Date currentdate
String accountid
}
我需要按日期范围内的位置获取总计数...(因此它将是每个表上按位置计算的所有单个表计数的总和,然后再按所有表的位置计算该计数的总和)。
还有一件事是我必须在汇总表上进行左连接而不是内部连接,因为我想要最终列表中7个表中的所有可能位置。 (某些表可能缺少某些位置)。
如何在hibernate中编写上述查询...我在应用程序中将摘要表作为域对象。 该应用程序基于grails / groovy。
以下是我到目前为止所写的内容...现在按每个表格的位置计算,按位置对这些内容求和。
def SummTblList = ['TxnSummMon','TxnSummTue','TxnSummWed','TxnSummThu','TxnSummFri','TxnSummSat','TxnSummSun']
def res_row
def resourceInstance=Resources.get(Long.parseLong(res_id))
SummTblList.each{
res_row=it.createCriteria().get {
eq('resource',resourceInstance)
between('date', new Date()-31, new Date())
projections {
sum('actioncount')
groupProperty 'location'
}
}
关于架构要求的事情(与上述无关): 基本上我对用户事务表有各种查询...用于事务,用户,资源,按日期,按用户,按资源,位置的聚合。我使用fusioncharts(基于闪存的工具,使用jasper报告和一般UI搜索运行报告)来运行图表。
我们之前使用的是单个表,但是为过去7天的用户活动生成报告,4个资源中的4个需要60秒...我想让它最少20倍。
提前致谢,
Priyank
答案 0 :(得分:0)
我会将数据库更改为具有单个事务表而不是一周中每天的表。这将大大简化查询。
如果我没有能力更改数据库,我会向数据库管理员提出一个令人信服的论据,说明为什么我们应该将数据库更改为只有一个事务表。
如果我的令人信服的论点被否定,我会做一些激烈的事情(不一定按此顺序):