我将一个Windows事件日志导入到表中。该日志包含每个Web服务器请求和带有日期时间戳的响应的记录。通常请求和响应记录彼此相邻,但偶尔会有2个请求,然后是2个响应。我想要一个计算平均响应时间的查询,即响应日期时间 - 请求日期时间。
答案 0 :(得分:1)
假设请求和响应将始终彼此相邻,请根据ID + 1获取响应并加入请求:
SELECT l.ID, l.[date and time] AS [Response Date], l2.[date and time] AS [Request Date], DATEDIFF([date and time],l2.[date and time]) AS [Time] FROM logs AS l
JOIN logs AS l2 ON l.ID=l2.ID+1
WHERE l.request=0 AND l2.request=1
答案 1 :(得分:1)
它只是一个评论太长,无法正确放置。
如果总是在一段时间内对请求做出响应,您可以通过对所有请求时间求和来简单计算响应时间的算术中值,将所有响应时间相加并仅从第二个中除去第一个请求(或响应)的数量。
这是可能的,因为你想要平均所有时间,你不需要配对回复和请求。
示例:
T0 - Tf
-- --
1 - 11
2 - 12
3 - 13
上述T0和Tf之间的平均差异与以下相同
T0 - Tf
-- --
2 - 11
1 - 12
3 - 13
所以下面的伪代码将起作用
select
(
(
sum([date and time])
from [Mytable]
where is response
)
-
(
sum([date and time])
from [Mytable]
where is request
)
)
/
(
count (rows)
from [Mytable]
where is request
)
当然,您可以删除重复项。 如果所有重复的请求都获得重复的响应,则可以选择不同的[日期和时间]。更复杂的情况是你可以使用行号来获得第一次发生。
无论如何,总结整批的诀窍是算术中位数。