2015-09-05 76 views
2

我需要构建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。 计算时差。 总结所有这些失败记录的持续时间,并按故障次数进行分类。得到平均水平。

例子:

enter image description here

比方说,我有以下数据表中,只有5列,在故障状态,最后一列时间应该是我的查询的一部分。

即我总共有3个失败的记录两个测试1和一个测试2.所以total time = 130minutes/3 = around 43.3 minutes will be in secs

有人可以让我这个SQL查询?

+2

能否请你举一个例子,如果在日志表中,哪些部分样本数据将是所需的输出那些记录 – Utsav

+1

你确定这是PostgreSQL吗? 'AUTO_INCREMENT'和'DATETIME'看起来不像它... –

+0

请通过添加您的PostgreSQL版本来更新您的问题。 – Houari

回答

1

前面已经提到这很容易做到用一个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

+0

文档:http://www.postgresql.org/docs/9.4/static/functions-window.html –

+0

非常感谢,它的工作原理, –