我有以下表格包含值从几个不同的设备读取每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设备和100万个条目。
这是我尝试过; 这是相当缓慢的,但返回我需要什么。 然而,除了其速度,还有另外一个问题:它只能找到丢失的时间间隔达到在给定月份的设备的最后一个条目; 之后事情会被忽略,因此有可能错过遗漏值的一个额外的时间间隔。
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