2010-02-07 43 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