RoR选择最新的“不同列”行

时间:2012-03-27 17:06:32

标签: mysql ruby-on-rails

我有一张表用于记录物品价格随时间的变化。 我正在尝试编写一种方法来抓取整个项目集(没有重复项)以及最新价格。

这意味着item_id为2的行可能会在我的表中多次出现,而item_id为3的行可能会在表格中出现多次等等,但结果应该只包括它们一次,最新价格

我正试图找出一种方法(如果可能的话,不使用Item.find_by_sql()),以返回整个项目集及其最新价格。

目前我有以下内容:

SELECT * FROM
(SELECT * FROM item_logs   
 ORDER BY created_at DESC) inner_table
GROUP BY item_id 

它确实有效,但这样做似乎是错误的,我想我正在寻找一种更优雅的方式来做到这一点,因为当前的实现要求我使用不太灵活的find_by_sql。

1 个答案:

答案 0 :(得分:0)

不确定它是否更好,但另一种选择是使用连接:

ItemLog.joins(
  'join (select item_id, max(created_at) as created_at from item_logs group by 1) 
   as i on i.item_id = item_logs.item_id and i.created_at = item_logs.created_at'
)

比find_by_sql解决方案更长,可能是对您的数据库更昂贵的查询,但将结果保持为活动记录关系,以便您可以链接其他方法。