【发布时间】:2018-05-17 13:14:38
【问题描述】:
我每隔 10 分钟收集一次车队的数据。以下查询按预期返回 144 行(一天中 10 分钟间隔的数量)。
select distinct(date_trunc('minute', (((time::timestamp) AT TIME ZONE 'UTC') AT TIME ZONE 'EST'))) FROM fleet_history WHERE (((time::timestamp) AT TIME ZONE 'UTC') AT TIME ZONE 'EST') BETWEEN '2017-11-30 00:00:00'::timestamp AND '2017-11-30 23:59:59'::timestamp ORDER BY date_trunc DESC
在fleet_history 表中,还有一个名为repair_state 的列 - 一个字符列,其中包含车辆是“工作”、“维修”还是“其他”的描述。
select * FROM fleet_history limit 5
id repair_state time
1 1 working 2017-11-22 15:45:34
2 2 in repair 2017-11-22 15:45:34
3 3 working 2017-11-22 15:45:34
4 4 working 2017-11-22 15:45:34
5 5 other 2017-11-22 15:45:34
我的目标是每隔 10 分钟输出截断的时间,以及工作车辆、维修车辆和其他车辆的数量(计数)(按间隔分组)。
如何在 PostgreSQL 中编写此查询?
【问题讨论】:
-
将日历表(其记录对应于 10 分钟间隔)左连接到您的
fleet_history表。然后按间隔聚合以获取计数。 -
如果你能处理取
2017-11-30 00:00:00(常数)和time列之间的差异(以分钟为单位)并将其命名为offset,你可以创建一个列interval= @987654330 @ mod 10。然后,按offset和repair_state进行选择计数(*)分组
标签: sql postgresql aggregate