包含每分钟数据的表中的每小时数据

时间:2019-07-09 11:32:55

标签: postgresql

我有一个表,该表在PostgreSQL数据库中包含三列。这三列分别是timestamptagvalue。在此表中,将从SCADA服务器生成的日志文件中自动插入数据。我需要该表中的每小时数据。 (20:00:00,21:00:00)

timestamp       tag value
2019-06-06 06:00:00 x   123
2019-06-06 06:00:00 y   456
2019-06-06 06:01:00 x   123
2019-06-06 06:01:00 y   656
2019-06-06 06:02:00 x   123 
2019-06-06 06:02:00 y   333 
.......
.......
2019-06-06 06:59:00 x   2232
2019-06-06 06:59:00 y   654
2019-06-06 07:00:00 x   5645
2019-06-06 07:00:00 y   54654

我想要确切的数据在2019-06-06 06:00:00 07:00:00。该表每分钟都在更新,因此我无法将其写在哪里。

所需的输出应该是这样的。

timestamp               tag value
2019-06-06 06:00:00     x   123
2019-06-06 06:00:00     y   456
2019-06-06 07:00:00     x   5645
2019-06-06 07:00:00     y   54654
...
.....
......
2019-06-09 07:00:00     x   5645
2019-06-09 07:00:00     y   54654

2 个答案:

答案 0 :(得分:0)

您可以先提取时间戳的小时部分,然后按小时分组结果。

SELECT date_part('hour',  timestamp) as hour, STRING_AGG(tag, ','), STRING_AGG(value, ',')
    FROM your_table
    GROUP BY hour;

各种functions提取时间戳的不同部分。

STRING_AGG可用于合并不同行中的值。

答案 1 :(得分:0)

似乎您只想要在整整一个小时记录的那些行。

您可以使用简单的WHERE子句来实现

select *
from the_table
where date_trunc('hour', "timestamp") = "timestamp";

date_trunc将时间戳值“截断”到给定的粒度。因此,分钟,秒和毫秒将设置为零。