2010-02-07 40 views
1

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

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

难道你不能找到最小和最大时间戳,并采取差异? – 2010-02-07 01:08:21

回答

1

如果您担心丢失_TimeStamps,则DATEDIFF方法可能不起作用。直数(*)会重复计算重复项(例如,2009-12-20 11:59:56.4)。

所以准确回答这个问题:

select count(distinct _timestamp) from table 

这个计算的不同_TimeStamp在表上的号码。然后,您可以将其限制到特定的_Timestamp范围,并将其乘以平均采样时间以获得最终结果。

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

+0

谢谢,没错。而且我知道平均采样时间,所以我可以将记录数转换为测量时间。 – KAE 2010-02-08 17:58:26

0

如何

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

马克拜尔斯评论继在TSQL类似下面的查询会给你以毫秒为单位(最小和最大时间戳之间的差异变化的第一个参数DATEDIFF将允许您更改总额时间在报告单位):

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

DATEDIFF reference