ActiveRecord执行统计某季,月,周的数据时,有没有方便的,好设计?
本想把timestamp再拆分一下,拆分出年,月,季,来。
不知道有没有好的设计思路。
如果不拆分,大家都是如何作的,谢谢。
activesupport 为 Time 类型提高了几个方便的方法:
beginning_of_week
end_of_week
beginning_of_month
end_of_month
...
可用的有 day, week, month, quarter, year (一年分四份,和四季略有不同)
譬如查询[b]去年更新[/b]的 post,可以这样:
[code="ruby"]last_year = Time.now.last_year # 去年今日
Post.find :all, :conditions => ['updated_at >= ? and updated_at <= ?',
last_year.beginning_of_year, last_year.end_of_year][/code]
更多关于时间的扩展说明,可以在 rails api 里搜。
mysql的:
select [color=indigo] DATE_FORMAT(signupdatetime,'%Y-%u')[/color] as groupfield, sum(xxx) as totalxxx
from tableName group by groupfield;
//上面是按每年的每星期汇总
其他的:
DATE_FORMAT(signupdatetime,'%Y-%m') //按年-月
year(signupdatetime) //按年
concat(year(signupdatetime), '-', quarter(signupdatetime)) //按年-季度
应该没有,像mssql2000这样的,写这样的语句,只能用case,when....
(ps 对rails不熟)
建议这么大的数据集做成每日日结的形式.
每天执行一次日结程序数据结果,包括敏感数据的快照(防止以后数据update后影响统计结果)
然后你就可以根据日结数据整理报表了。
补充:
一年中的 quarter 是这样分割的
1,2,3 月
4,5,6 月
7,8,9 月
10,11,12 月
如果不是用传统季度,quarter 就满足要求了。