SQL查询来计算不同事件之间的平均持续时间
我需要构建SQL查询的帮助:SQL查询来计算不同事件之间的平均持续时间
这里是我用来存储测试运行统计我的Postgres表。
CREATE TABLE logs
(
id bigint NOT NULL,
test_id int,
state text,
start_date timestamp with time zone,
end_date timestamp with time zone,
CONSTRAINT logs_pkey PRIMARY KEY (id)
)
此表包含测试开始时间,结束时间和状态。 由于测试失败,我需要计算我的使用情况。即测试失败与下一次立即测试开始之间的时间间隔。
即对于每个测试失败的记录,获取end_date并获取相同测试的下一个立即记录的start_date。 计算时差。 总结所有这些失败记录的持续时间,并按故障次数进行分类。得到平均水平。
例子:
比方说,我有以下数据表中,只有5列,在故障状态,最后一列时间应该是我的查询的一部分。
即我总共有3个失败的记录两个测试1和一个测试2.所以total time = 130minutes/3 = around 43.3 minutes will be in secs
。
有人可以让我这个SQL查询?
前面已经提到这很容易做到用一个window function:
select id,
test_id,
start_date,
end_date,
state,
case
when state = 'FAIL' then lag(start_date) over (partition by test_id order by start_date desc) - end_date
else null
end as time_diff
from logs
order by test_id, start_date desc;
SQLFiddle:http://sqlfiddle.com/#!15/0d40f/2
文档:http://www.postgresql.org/docs/9.4/static/functions-window.html –
非常感谢,它的工作原理, –
能否请你举一个例子,如果在日志表中,哪些部分样本数据将是所需的输出那些记录 – Utsav
你确定这是PostgreSQL吗? 'AUTO_INCREMENT'和'DATETIME'看起来不像它... –
请通过添加您的PostgreSQL版本来更新您的问题。 – Houari