首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用postgresql和ruby on rails使用日期范围编写SQL查询

使用postgresql和ruby on rails使用日期范围编写SQL查询
EN

Stack Overflow用户
提问于 2017-10-11 12:58:03
回答 2查看 258关注 0票数 0

我在用下面的表格编写sql语句时遇到了问题。我有两个桌子,一个是meter,另一个是meter_infometer表的列如下

代码语言:javascript
复制
id, name, created_at

meter_info有下面的列

代码语言:javascript
复制
id, voltage, meter_id, created_at 

数据将连续保存到meter_info表中。我想写一个查询,将采取一个日期范围,并给我准确的一个米的信息,在每个日期内的每一个米。

假设我的表里有三米。

代码语言:javascript
复制
 id     name      created_at
 1      meter-a   2017-10-10
 2      meter-b   2017-10-11

在我的表里我有很多数据

代码语言:javascript
复制
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-102017-10-11)

代码语言:javascript
复制
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查询。我正在使用PostgresqlRuby on Rails。提前一吨谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 14:28:03

您必须使用区别于子句。

代码语言:javascript
复制
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
;
票数 1
EN

Stack Overflow用户

发布于 2017-10-11 15:06:32

如果您想使用rails活动记录,可以这样做:

代码语言:javascript
复制
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分组的日期。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46688803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档