我有一个包含列'id','resource_id','read_time','value'的表,其中'value'是一个浮点数
我想要完成的是返回一个记录列表,使每条记录的“值”是特定“read_time”但具有不同“resource_id”值的所有记录的总和。
我想知道是否有一种聪明的方法(即不循环遍历所有条目)来实现这一目标。目前我正在实施这些方面:
@aggregate_meters = []
@res_one_meters = Meter.find(:all, :conditions => ["resource_id = ?", 1])
@res_one_meters.each do |meter|
read_time = meter.read_time
value = meter.value
if res_two_meter = Meter.find(:first, :conditions => ["resource_id = ? AND read_time = ?", 2, read_time ])
value = value + res_two_meter.value
end
aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
@aggregate_meters.push(aggregate_meter)
end
谢谢。
答案 0 :(得分:5)
ActiveRecord :: Calculate是你的朋友。让您通过一次数据库调用完成所需的操作。它使用组中使用的列中的唯一值作为键返回哈希值。
这是您编写的代码,重写为使用sum。
values = Meter.sum(:value, :group => :read_time)
values.each do |read_time, value|
aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
@aggregates_meter.push(aggregate_meter)
end