SQL查询计算总时间量

时间:2010-02-07 01:02:54

标签: sql-server count

我在SQL表中有一列是进行测量的时间。如下表1所示,测量时间可能不按顺序,重复或不规则采样(它们通常但不总是相隔100毫秒)。缺少时间戳时(如下例中的2009-12-20 11:59:56.1),这意味着我们没有进行测量。所以,我需要知道我们进行测量的总时间。这可以近似为唯一_TimeStamp值的计数乘以典型时间戳(100毫秒)。我该如何写这个查询?它可能必须运行大量记录(在约100毫秒时采样30天),如果这会影响解决方案。谢谢!

Table1:
_TimeStamp
2009-12-20 11:59:56.0
2009-12-20 11:59:56.5
2009-12-20 11:59:56.3
2009-12-20 11:59:56.4
2009-12-20 11:59:56.4
2009-12-20 11:59:56.9 

3 个答案:

答案 0 :(得分:1)

怎么样

Select 100 * count(*)
From Table
Where _Timestamp between @startTime and @EndTime

答案 1 :(得分:1)

如果您关注缺少的_TimeStamps,DATEDIFF方法可能无效。直接计数(*)将重复计算重复数(2009-12-20 11:59:56.4)。

所以要完全回答这个问题:

select count(distinct _timestamp) from table

这会计算表中不同_Timestamp的数量。然后,您可以将其限制为特定的_Timestamp范围,并将其乘以平均采样时间以获得最终结果。

不确定性能会是什么样,但_Timestamp列上的索引可能会有所帮助。

答案 2 :(得分:0)

根据Mark Byers的评论,在TSQL中,类似下面的查询会给你最小和最大时间戳之间的差异(以毫秒为单位)(改变DATEDIFF的第一个参数将允许你更改单位总时间是报道):

 SELECT DATEDIFF(millisecond, min(_TimeStamp), max(_TimeStamp)) as TotalTime
 FROM Table1

DATEDIFF reference