2015-09-05 99 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

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