车辆has_many服务。服务has_many类型(0、1、2、3、4)。
我需要编写一个查询,该查询显示每种类型的服务最后一次完成车辆的里程读数。
在我的MS ACCESS时代,这是一个简单的交叉表(transform)查询。有人能在rails环境中指出正确的方向吗?谢谢
这是我试图整理的长手版本:
@a_last = v.services.maximum(:mileage_closed, :conditions => ["closed = TRUE AND service_type_id > 0"])
@b_last = v.services.maximum(:mileage_closed, :conditions => ["closed = TRUE AND service_type_id > 1"])
@c_last = v.services.maximum(:mileage_closed, :conditions => ["closed = TRUE AND service_type_id > 2"])
@d_last = v.services.maximum(:mileage_closed, :conditions => ["closed = TRUE AND service_type_id > 3"])
@e_last = v.services.maximum(:mileage_closed, :conditions => ["closed = TRUE AND service_type_id > 4"])谢谢!
发布于 2014-07-22 07:17:18
简单的答案是遍历一个范围并收集您的结果:
mileages = (0..4).collect do |service_type|
vehicle.services.maximum(:mileage_closed, :conditions => ["CLOSED = TRUE AND SERVICE_TYPE_ID = #{service_type}"]
end我猜您的意思是使用等于而不是大于搜索服务类型id。
但是,这将在运行时生成5个sql语句。您可能会发现这不会对性能造成太大影响。如果性能确实成为问题,另一种方法是编写一条SQL语句来查找结果(它将按vehicle_id和service_type_id分组,然后在mileage_closed列上运行MAX() ),并使其成为数据库中的一个视图。然后,您应该能够在一次数据库往返中找到这些结果。
https://stackoverflow.com/questions/24880856
复制相似问题