Sql 如何查询每个属性值的最后一个值?

Sql 如何查询每个属性值的最后一个值?,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我正在使用RubyonRails和PostgresQL 我使用此查询查找表中具有特定设备属性值的最后一个值,该值非常有效: Positions.where(device_id: 3).last 但是,现在我需要查询多个设备中每个设备的最后一个值。我很确定有一种方法比单独调用每个设备的最后一个值更有效 我如何将这两者结合起来: Positions.where(device_id: 3).last Positions.where(device_id: 5).last Positions.where

我正在使用RubyonRails和PostgresQL

我使用此查询查找表中具有特定设备属性值的最后一个值,该值非常有效:

Positions.where(device_id: 3).last
但是,现在我需要查询多个设备中每个设备的最后一个值。我很确定有一种方法比单独调用每个设备的最后一个值更有效

我如何将这两者结合起来:

Positions.where(device_id: 3).last
Positions.where(device_id: 5).last
Positions.where(device_id: 23).last
我试着在这里和文档中搜索。我已经阅读并尝试了一些“分组”和“拥有”方法,但都没有效果。

试试这个更新

device_ids = [3,5,23]
Positions.where(device_id: device_ids).group(:device_id).maximum(:id)
它返回一个散列,要获得位置记录,您可以

device_ids = [3,5,23]
last_positions = Position.where(id: Positions
                         .where(device_id: device_ids)
                         .group(:device_id)
                         .maximum(:id).values)

我尝试了查询并收到以下错误ActiveRecord::StatementInvalid:PG::GroupingError:error:column positions.id必须出现在GROUP BY子句中或用于聚合函数它生成的sql是什么?选择positions.*从positions WHERE positions.deviceid在3,5 GROUP BY deviceid中,positions.id HAVING positions.id=MAXpositions.idok,我没有访问正确的数据来尝试查询,检查更新的答案,它对我有效..这有效!谢谢你,我唯一要做的编辑就是位置应该是位置。