用时间戳差异计算丢失的数据包

时间:2014-01-07 18:58:12

标签: sql reporting-services ssrs-2008

我有一个表,其中包含我从特定设备收到的每个数据包的条目。该表有一列带有时间戳(时钟周期),每半小时收到一个数据包。 我想计算丢失的数据包。

我的方法是计算每个连续行的时间戳的差异,如果差异大于40分钟,则递增计数器。

但我不确定如何使用sql查询。

我正在使用MS Reporting Services 2008 R2显示丢失数据包的数量。

1 个答案:

答案 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

SQL Fiddle with demo

对于每一行,这是找到下一个接收到的数据包,然后如果间隙&gt;将其添加到总数中。 40分钟。

显然你需要调整你的表/列。如果这没有帮助,您需要提供一些样本数据和预期结果。