2015-03-31 111 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