2015-03-31 179 views
0

我有一個日誌表,其中請求和響應正在記錄,如果一行用於請求,則下一行將用於響應。有一個時間欄記錄了他們的時間。我想寫一個可以減去兩個連續行(即請求和響應)的時間的查詢,然後只給出那些時間差超過4秒的請求和響應。使用SQL查詢查找表的兩個連續輸入之間的差異

表是這樣的

Sr.no  Type  time 
1   Req  2015-03-31 02:26:36.330000 
2   Res  2015-03-31 02:26:36.330000 
3   Req  2015-03-31 03:18:30.780000 
4   Res  2015-03-31 03:18:30.820000 
+0

鑑於您的示例數據,不會返回任何行。使用一些可以返回的信息更新它可能會有所幫助,並顯示您期望的結果。 – AdamMc331 2015-03-31 14:43:30

回答

0

如果你知道srno有沒有間隙的增加值,那麼你可以使用一個加入這樣的:

select lreq.*, lres.time, 
     timestampdiff('second', lreq.time, lres.time) as diff_in_secs 
from logs lreq join 
    logs lres 
    on lreq.srno = lres.srno - 1 and 
     lreq.type = 'req' and 
     lres.type = 'res' 
having diff_in_secs > 4; 

如果上述條件不真的,你可以用相關的子查詢來做類似的事情。

+0

嗨戈登,謝謝你的回答是非常有幫助的。它完美地解決了我的目的。 – 2015-04-07 11:57:27