RoR 选择最新的"distinct by column"行



我有一个表,用来记录物品价格随时间的变化。我正在尝试写一种方法,它可以抓取整套商品(没有重复),以及它们的最新价格。

这意味着一个item_id为2的行可能会在我的表中出现几次,一个itemid为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,这不是很灵活。

不确定它是否更好,但另一个选项是使用联接:

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解决方案更长,这可能是对数据库的一个更昂贵的查询,但将结果保持为活动记录关系,以便您可以在上链接其他方法。

最新更新