【发布时间】:2021-08-04 06:28:58
【问题描述】:
我有一个模型 sensor,它存储来自 Arduino 的环境数据(温度、湿度)。
create_table "sensors", force: :cascade do |t|
t.integer "system_id"
t.float "value"
t.datetime "created_at"
end
我想获得所有设备的平均值。为此,我需要通过system_id 获取所有设备的最后一个值。
我想要得到的结果应该是这样的:
[#<Sensor:0x0000556dd6a5c758
id: 10,
sensor_id: 1,
value: 14.0,
created_at: Sat, 31 Jul 2021 18:41:13 UTC +00:00,
#<Sensor:0x0000556dd6a6f448
id: 149,
sensor_id: 2,
value: 22.0,
created_at: Sat, 31 Jul 2021 18:41:13 UTC +00:00,
#<Sensor:0x0000556dd6a6f238
id: 329,
sensor_id: 3,
value: 11.0,
created_at: Sat, 31 Jul 2021 18:41:13 UTC +00:00,
...]
或者只是对应于任务条件的值数组:
[14.0, 22.0, 11.0]
我是这样尝试的:
Sensor.order('created_at DESC').distinct(:system_id)
但它不起作用。知道怎么做吗?
【问题讨论】:
-
你在找
Sensor.select("system_id, max(created_at) as created_at").group(:system_id) -
@Eyeslandic 谢谢,是的,这几乎是我想要的,但结果是,没有我需要的值
[ #<Sensor:0x0000556dd86854e8 id: nil, service_id: 1, created_at: Sat, 31 Jul 2021 12:20:50 UTC +00:00>, #<Sensor:0x0000556dd86854e8 id: nil, service_id: 2...]
标签: sql ruby-on-rails postgresql ruby-on-rails-5.2