我有一个表,其中包含我从特定设备收到的每个数据包的条目。该表有一列带有时间戳(时钟周期),每半小时收到一个数据包。 我想计算丢失的数据包。
我的方法是计算每个连续行的时间戳的差异,如果差异大于40分钟,则递增计数器。
但我不确定如何使用sql查询。
我正在使用MS Reporting Services 2008 R2显示丢失数据包的数量。
答案 0 :(得分:1)
我们对您的数据知之甚少,但请说表格如下:
create table ClockTick
(
packetTime datetime
)
insert into ClockTick select '01-Jan-2014 12:00'
insert into ClockTick select '01-Jan-2014 12:30'
insert into ClockTick select '01-Jan-2014 13:00'
insert into ClockTick select '01-Jan-2014 14:00'
insert into ClockTick select '01-Jan-2014 14:30'
insert into ClockTick select '01-Jan-2014 15:30'
insert into ClockTick select '01-Jan-2014 16:00'
insert into ClockTick select '01-Jan-2014 17:00'
您可以使用以下查询获得所需的结果,即 3 :
with ticks as
(
select gapCounter = case
when datediff(minute, t.packetTime, g.packetTime) >= 40 then 1
else 0
end
from ClockTick t
cross apply (select top 1 g.packetTime
from ClockTick g
where t.packetTime < g.packetTime
order by g.packetTime) g
)
select lostPackets = sum(gapCounter)
from ticks
对于每一行,这是找到下一个接收到的数据包,然后如果间隙&gt;将其添加到总数中。 40分钟。
显然你需要调整你的表/列。如果这没有帮助,您需要提供一些样本数据和预期结果。