【发布时间】:2012-07-18 00:34:39
【问题描述】:
我有一个表一个模型视图:
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
)
谢谢!
【问题讨论】:
-
请指定您的 DBMS。是postgres吗?
标签: ruby-on-rails activerecord