首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails活动记录CrossTab查询

Rails活动记录CrossTab查询
EN

Stack Overflow用户
提问于 2014-07-22 07:02:23
回答 1查看 719关注 0票数 1

车辆has_many服务。服务has_many类型(0、1、2、3、4)。

我需要编写一个查询,该查询显示每种类型的服务最后一次完成车辆的里程读数。

在我的MS ACCESS时代,这是一个简单的交叉表(transform)查询。有人能在rails环境中指出正确的方向吗?谢谢

这是我试图整理的长手版本:

代码语言:javascript
复制
        @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"])

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 07:17:18

简单的答案是遍历一个范围并收集您的结果:

代码语言:javascript
复制
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() ),并使其成为数据库中的一个视图。然后,您应该能够在一次数据库往返中找到这些结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24880856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档