我有一张表用于记录物品价格随时间的变化。 我正在尝试编写一种方法来抓取整个项目集(没有重复项)以及最新价格。
这意味着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。
答案 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解决方案更长,可能是对您的数据库更昂贵的查询,但将结果保持为活动记录关系,以便您可以链接其他方法。