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