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

Sql 使用时间戳差异计算丢失的数据包,sql,reporting-services,ssrs-2008,Sql,Reporting Services,Ssrs 2008,我有一个表,其中包含我从特定设备收到的每个数据包的条目。该表有一列带有时间戳时钟滴答声,每个数据包每半小时接收一次。 我想清点丢失的包裹 我的方法是计算每个连续行上时间戳的差值,如果差值大于40分钟,则增加一个计数器 但我不知道如何使用sql查询来实现它 我正在使用MS Reporting Services 2008 R2显示丢失数据包的计数。我们对您的数据了解不多,但可以这样说: create table ClockTick ( packetTime datetime ) insert

我有一个表,其中包含我从特定设备收到的每个数据包的条目。该表有一列带有时间戳时钟滴答声,每个数据包每半小时接收一次。 我想清点丢失的包裹

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

但我不知道如何使用sql查询来实现它


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

我们对您的数据了解不多,但可以这样说:

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

对于每一行,这是查找下一个接收到的数据包,如果间隔>40分钟,则将其添加到总数中


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

谢谢!这真的很有帮助。该表有一个名为Timestamp的列,是一个64位整数字段。该值是从System::DateTime对象获得的,调用方法Ticks。我想我必须把int记号转换成datetime,这样我就可以像你一样使用datediff了。不客气!您可以将查询调整为类似于……当g.[timestamp]-t.[timestamp]>=24000000000,然后是1或0……,即24000000000个刻度的差值是40分钟;如果你不想在桌子上乱搞的话,算术可能是错的。我做到了!谢谢!