【发布时间】:2017-06-23 15:02:58
【问题描述】:
背景: 当操作员按下网页上的按钮时,我有几个硬件设备(控制器)正在向它们发送命令。我们正在调查为什么有时通信速度很慢。我设置了一个 python 自动化脚本来抓取页面并在三个单独的控制器上每分钟更改控制器模式。我记录了操作的开始和持续时间。
样本数据:
Id Cont_id Start_time (pst) Duration (sec)
316 11002 2017-06-22 20:05:13 5
317 6224 2017-06-22 20:05:38 15
319 7782 2017-06-22 20:06:20 15
318 11002 2017-06-22 20:06:20 5
320 6224 2017-06-22 20:06:56 15
321 11002 2017-06-22 20:07:27 5
336 7782 2017-06-22 20:07:38 500
322 6224 2017-06-22 20:08:14 15
323 11002 2017-06-22 20:08:36 5
324 6224 2017-06-22 20:09:32 10
325 11002 2017-06-22 20:09:43 10
326 6224 2017-06-22 20:10:44 10
327 11002 2017-06-22 20:10:55 10
328 6224 2017-06-22 20:11:56 5
329 11002 2017-06-22 20:12:07 15
330 6224 2017-06-22 20:13:03 10
期望的结果: 我想要一份报告,每分钟都有一个条目,并告诉我每个控制器当前运行了多长时间。例如,考虑样本数据中约 20:07 的时间(控制器 7782)。我想看到以下内容;
sample_time | cont_id | last_start_time | time_in_operation
20:08:00* | 7782 | 20:07:38 | 22
20:08:00 | 11002 | 20:07:27 | 5 *
20:08:00 | 6224 | 20:06:56 | 15
20:09:00 | 7782 | 20:07:38 | 88
20:09:00 | 11002 | 20:08:36 | 5
20:09:00 | 6224 | 20:08:14 | 15
20:10:00 | 7882 | 20:07:38 | 148
....etc
- 注意 1:为了简洁起见,我显示时间 - 实际上我想要整个日期/时间 注2:这是5秒,因为操作完成了,所以使用 持续时间值。
问题:我最大的问题是每分钟都想出一个模拟条目。一旦解决了这个问题,我想我可以得到其余的......那么,我如何编写一个查询,让我在两个时间范围之间的每一分钟都有一个条目,以我可以用来计算最终报告的方式编写为根据样本数据。
设置:
CREATE TABLE public.operationtimelog (
id int4 NOT NULL DEFAULT nextval('operationtimelog_id_seq'::regclass),
controller_id int4 NOT NULL,
op_start_time timestamp NOT NULL,
op_duration int4 NOT NULL,
CONSTRAINT operationtimelog_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
insert into
operationtimelog (controller_id, op_start_time, op_duration) values
(11002, '2017-06-22 20:05:13', 5),
(6224, '2017-06-22 20:05:38', 15),
(7782, '2017-06-22 20:06:20', 15),
(11002, '2017-06-22 20:06:20', 5),
(6224, '2017-06-22 20:06:56', 15),
(11002, '2017-06-22 20:07:27', 5),
(7782, '2017-06-22 20:07:38', 500),
(6224, '2017-06-22 20:08:14', 15),
(11002, '2017-06-22 20:08:36', 5),
(6224, '2017-06-22 20:09:32', 10),
(11002, '2017-06-22 20:09:43', 10),
(6224, '2017-06-22 20:10:44', 10),
(11002, '2017-06-22 20:10:55', 10),
(6224, '2017-06-22 20:11:56', 5),
(11002, '2017-06-22 20:12:07', 15)
【问题讨论】:
-
我不明白逻辑,为什么你必须得到条目 id 336 的期望结果
-
@OtoShavadze:谢谢……如果你不明白,其他人也不会明白。我已经更新了所需的结果,如果足够清晰,请告诉我。
-
@SteveJ,因为您使用解决方案更新了您的问题,请在末尾添加
select * from durations以使其正常工作:-)
标签: sql postgresql