我在用下面的表格编写sql语句时遇到了问题。我有两个桌子,一个是meter,另一个是meter_info。meter表的列如下
id, name, created_atmeter_info有下面的列
id, voltage, meter_id, created_at 数据将连续保存到meter_info表中。我想写一个查询,将采取一个日期范围,并给我准确的一个米的信息,在每个日期内的每一个米。
假设我的表里有三米。
id name created_at
1 meter-a 2017-10-10
2 meter-b 2017-10-11在我的表里我有很多数据
id voltage created_at meter_id
1 15 2017-10-10 1
2 16 2017-10-10 1
3 14 2017-10-10 2
4 15 2017-10-10 2
5 13 2017-10-11 1
6 11 2017-10-11 1
7 13 2017-10-11 2
8 12 2017-10-11 2现在,我想编写一个查询,该查询将接受日期范围参数并输出如下(数据范围为2017-10-10到2017-10-11)
created_at meter_id voltage
2017-10-10 1 16
2017-10-10 2 15
2017-10-11 1 11
2017-10-11 2 12所以我要日期内每一米的最后一次记录。我不知道如何编写sql查询。我正在使用Postgresql和Ruby on Rails。提前一吨谢谢。
发布于 2017-10-11 14:28:03
您必须使用区别于子句。
SELECT DISTINCT ON (created_at, meter_id) created_at, meter_id, voltage
FROM meter_info
WHERE created_at BETWEEN '2017-10-10' AND '2017-10-11'
ORDER BY created_at, meter_id, id DESC
;发布于 2017-10-11 15:06:32
如果您想使用rails活动记录,可以这样做:
start_date = Date.new 2017, 10, 10
end_date = Date.new 2017, 10, 11
MeterInfo.select("DISTINCT ON (created_at::date, meter_id) * ").where(created_at: start_date..end_date).order("created_at::date, meter_id, id DESC")注意,我假设'created_at‘列是一个日期时间,因此需要转换为使用postgresql ::date分组的日期。
https://stackoverflow.com/questions/46688803
复制相似问题