我有一个模型视图:
View(id: integer, created_at: datetime)
我想在一段时间内生成每小时、每天、每月或每年的查看次数,以便在图表上使用它们。我已经在做类似的事情:
View.group('DATE(views.created_at)')
.select("*, count(*) AS series_count, DATE(views.created_at) AS series_time")
.where(:created_at => (Time.now-7.days)..Time.now)
这导致:
2012-06-16 => 20
2012-06-17 => 12
2012-06-18 => 15
2012-06-20 => 38 # Issue: Didn't include a day with no records
2012-06-21 => 11
2012-06-22 => 76
第一个问题是它不会在没有记录的情况下为替代天数或月数或任何其他内容添加填充。
第二个问题是有时它会增加一天,导致 8 天!
第三个问题是,当我尝试显示每小时和其他时间周期的计数时,它变得非常棘手,有人可以提出一个更好的解决方案,它也适用于日周期以外的其他时间周期吗?
基本上我正在制作一个包含在所有模型中的模块时间轴,以便轻松生成统计信息,例如:
include Timeline # on the model
Model.timeline(
:time_column => :created_at,
:period => (Time.now-24.hours)..Time.now,
:by => :hours
)
谢谢!