使用单个查询从PostgreSQL中的表中获取统计数据

时间:2017-05-31 09:00:20

标签: sql postgresql time-series

我正在使用PostgreSQL数据库,我有必须在可配置的时间跨度内提供统计数据。 我已粘贴了表格的样本数据。

**id   timeStamp        caseId**  
224 2017-05-30 12:47:27 4654
226 2017-05-30 1:59:46  5165
225 2017-05-30 1:53:31  4658
223 2017-05-30 2:44:45  4656
221 2017-05-30 4:05:53  4645
220 2017-05-30 6:05:12  4640

如果时间跨度是1小时,那么我想要每小时的计数记录 比如[1,2,1,0,1,0,1]等......

我可以使用12个不同的查询来开始和结束日期。但我想在一个查询中输出。

是否可以在一个查询中使用。?

1 个答案:

答案 0 :(得分:1)

您可以将外部联接与表函数一起使用,以产生您想要查询的小时数。

这假设您的表名为incidents

SELECT hours.h, count(i)
FROM incidents i
   RIGHT JOIN generate_series(
                 TIMESTAMP '2017-05-30 00:00:00',
                 TIMESTAMP '2017-05-30 23:00:00',
                 INTERVAL '1 hour'
              ) hours(h)
      ON i.timestamp >= hours.h
         AND i.timestamp < hours.h + INTERVAL '1 hour'
GROUP BY hours.h;

如果您希望将结果作为数组,请忽略hours.h列表中的SELECT并使用

围绕查询
SELECT array_agg(count)
   FROM (...) q;