我正在使用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个不同的查询来开始和结束日期。但我想在一个查询中输出。
是否可以在一个查询中使用。?
答案 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;