2016-09-05 2 views
0

eine Tabelle mit diesen Aufzeichnungen zu haben:SQL fehlt Datum Abfrage

01-JAN-15 10:00 
01-JAN-15 11:00 
01-JAN-15 13:00 
01-JAN-15 14:00 
01-JAN-15 15:00 
01-JAN-15 18:00 
01-JAN-15 19:00 

Es ist 1h Auflösung, so in meinem Beispiel 00.00, 16:00 und 17:00 Uhr fehlt.

Ich möchte eine SQL-Abfrage erstellen, die so etwas wie dieses zurückgibt (fehlende Stunde Beginn und Dauer):

01-JAN-15 12:00, 01:00 
01-JAN)15 16:00, 02:00 

Jeder Vorschlag?

+1

Bitte bearbeiten Sie Ihre Frage und zeigen Sie, was die Spalten und Typen sind. Es ist unklar, wie viele verschiedene Spalten Ihre Daten darstellen. –

+0

Nur auf der Suche nach dem Edit-Button .... :) aber du warst schneller! danke – Chris

Antwort

0

Angenommen, Ihre Werte datetime Werte sind, dann können Sie etwas tun:

select t.*, 
     datediff(hour, datetimecol, next_datetimecol) 
from (select t.*, 
      lead(datetimecol) over (order by datetimecol) as next_datetime 
     from t 
    ) t 
where next_datetimecol is not null and 
     dateadd(hour, 1, datetimecol) < next_datetimecol; 

auf Datentypen Je und der Präzision, könnte dies nicht genau arbeiten. Aber die Idee ist im Grunde die gleiche. . . Verwenden Sie lead(), um den nächsten Wert zu erhalten und einige Vergleiche durchzuführen.

+0

Vielen Dank, ja Wert sind Datetime. Über die Genauigkeit ist das andere Feld (min, sec, milli ...) in meinem Fall immer Null. – Chris

+0

in meinem Fall möchte ich zwei Datensätze, aber für jede Sekunde Wert sollte die Lücke Dauer enthalten – Chris

+0

Ich benutze SQL 2008R2, sieht aus wie LEAD ist nur in 2012 leider verfügbar. – Chris