2015-09-05 4 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) 
) 

В этой таблице указаны время начала, окончания и состояния запуска. Мне нужно вычислить, что я использую из-за отказа теста. т.е. промежуток времени между неудачей теста и очередным началом немедленного тестирования.

i.e для каждого теста не удалось записать записи, получить end_date и получить start_date следующей немедленной записи для того же теста. рассчитать разницу во времени. Составьте продолжительность для всех таких неудачных записей и разделите количество неудач. чтобы получить среднее значение.

Пример:

enter image description here

Допустим, я следующая таблица данных, только 5 столбцов, последний столбец Продолжительность в неисправном состоянии должно быть частью моего запроса.

i.e у меня есть полностью 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

Спасибо большое, это работает, –

Смежные вопросы