缺少時間間隔,我有以下表中包含的值從幾個不同的設備讀取,每15分鐘:查找表
ID DeviceID Date Value
----------------------------------------------
1 3 24.08.2011 00:00:00 0.51
2 3 24.08.2011 00:15:00 2.9
3 3 24.08.2011 00:30:00 0
4 3 24.08.2011 00:45:00 7.1
5 3 24.08.2011 01:00:00 1.05
6 3 24.08.2011 03:15:00 3.8
我想找到的所有表格中的空白,爲每一個設備,在特定月份沒有條目的地方。對於上表,結果應該是這樣的:
DeviceID StartDate EndDate
-------------------------------------------------------
3 24.08.2011 01:00:00 24.08.2011 03:15:00
該表大約有35000個設備和1億條目。
這就是我試過的;它很慢,但返回我需要的東西。但是,除了速度之外,還有另一個問題:它只能找到特定月份中設備最後一次輸入的缺失間隔;之後的任何內容都將被忽略,因此可能會錯過缺少值的額外時間間隔。
SELECT
t2.Date AS StartDate
, t1.Date AS EndDate
FROM
TestTable t1
INNER JOIN TestTable t2 ON t1.DeviceID = t2.DeviceID
WHERE
(t2.Date = (SELECT MAX(Date) FROM TestTable t3 WHERE t3.Date < t1.Date AND t3.DeviceID = t1.DeviceID)
AND DATEDIFF(MINUTE, t2.Date, t1.Date) > 15)
AND t1.DeviceID = @id
AND DATEPART(YEAR, t1.Date) = @year AND DATEPART(MONTH, t1.Date) = @month
你可能想看看[這](http://www.manning.com/nielsen/SampleChapter5 .pdf)其範例章節涵蓋了Itzik Ben-Gan的空白和島嶼 –
@ConradFrix感謝您的鏈接。 – alex
@NikolaMarkovinović謝謝你,但我自己刪除了這個問題。這是一個糟糕的問題,我設法弄清楚了自己(我也使用了'ROW_NUMBER()')。 – alex