按时间戳分钟在 postgres 中查询

Posted

技术标签:

【中文标题】按时间戳分钟在 postgres 中查询【英文标题】:query in postgres by timestamp minutes 【发布时间】:2017-12-17 13:09:07 【问题描述】:

我想知道如何通过查询进行分组,我需要在我的数据库中对同一分钟的所有数据进行分组以对所有数据求和。

ws_controller_hist=>  SELECT timestamp, type, medium from default_dataset where type like 'status_devices' and timestamp> current_timestamp - interval '60 minutes' and organization_id = '9fc02db4-c3df-4890-93ac-8dd575ca5638' order by timestamp asc;

       timestamp        |      type      | medium
------------------------+----------------+--------
 2017-12-17 12:44:00+00 | status_devices | 1,0
 2017-12-17 12:44:00+00 | status_devices | 1,0
 2017-12-17 12:44:00+00 | status_devices | 1,0
 2017-12-17 12:44:01+00 | status_devices | 1,0
 2017-12-17 12:44:01+00 | status_devices | 1,0
 2017-12-17 12:44:10+00 | status_devices | 0,1
 2017-12-17 12:44:10+00 | status_devices | 0,1

做这个查询

ws_controller_hist=>  SELECT timestamp, type, sum(medium[1]) from default_dataset where type like 'status_devices' and timestamp> current_timestamp - interval '60 minutes' and organization_id = '9fc02db4-c3df-4890-93ac-8dd575ca5638' group by timestamp, type order by timestamp asc;

       timestamp        |      type      | sum
------------------------+----------------+-----
 2017-12-17 12:44:00+00 | status_devices |   3
 2017-12-17 12:44:01+00 | status_devices |   2
 2017-12-17 12:44:10+00 | status_devices |   0

我想一共得到5,那一分钟的总数是44明白吗?

【问题讨论】:

【参考方案1】:

我想你想要date_trunc():

select date_trunc('minute', timestamp) as timestamp_min, type, 
       sum(medium[1])
from default_dataset
where type like 'status_devices' and
      timestamp > current_timestamp - interval '60 minutes' and
      organization_id = '9fc02db4-c3df-4890-93ac-8dd575ca5638'
group by timestamp_min, type
order by timestamp_min asc;

【讨论】:

以上是关于按时间戳分钟在 postgres 中查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 postgres、timescaledb 获取时间戳至少在 5 分钟前的最新行

Postgres 查询计划对于增加时间戳范围的查询有很大不同

优化 Postgres 对时间戳范围的查询

Postgres 时间戳

Postgres:获取最大值和最小值,以及它们出现的时间戳

范围 COUNT 查询基于 Hibernate 中纪元时间戳的 DATE