Finde fehlende Zeitintervalle in einer Tabelle

Ich habe die folgende Tabelle, die Werte enthält, die alle 15 Minuten von verschiedenen Geräten gelesen werden:

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

Ich möchte alle Lücken in der Tabelle für jedes Gerät finden, für das für einen bestimmten Monat keine Einträge vorhanden sind. Für die obige Tabelle sollte das Ergebnis ungefähr so ​​aussehen:

DeviceID    StartDate               EndDate
-------------------------------------------------------
3           24.08.2011 01:00:00     24.08.2011 03:15:00

Die Tabelle enthält ungefähr 35000 Geräte und 100 Millionen Einträge.

Das habe ich versucht; Es ist ziemlich langsam, gibt aber das zurück, was ich brauche. Neben der Geschwindigkeit gibt es jedoch ein weiteres Problem: Es werden nur fehlende Intervalle bis zum letzten Eintrag für ein Gerät im angegebenen Monat gefunden. alles, was danach folgt, wird ignoriert, so dass es möglich ist, ein zusätzliches Intervall fehlender Werte auszulassen.

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage