Прочтите что-нибудь о ROW_NUMBER ()
Тогда посмотрите на этот запрос:
SELECT <br>
DeviceID,<br>
"DateTime",<br>
ROW_NUMBER() OVER(PARTITION BY DeviceID ORDER BY "DateTime") OrdinalNumber<br>
FROM TableName
Then look at this query:
WITH DateTable <br>
AS<br>
(SELECT <br>
DeviceID,<br>
"DateTime",<br>
ROW_NUMBER() OVER(PARTITION BY DeviceID ORDER BY "DateTime") OrdinalNumber<br>
FROM TableName)<br>
SELECT <br>
D1.DeviceID,<br>
D1."DateTime" EndDate,<br>
D2."DateTime" StartDate<br>
FROM DateTable D1<br>
JOIN DateTable D2<br>
ON (D1.DeviceID = D2.DeviceID) <br>
AND (D1.OrdinalNumber = D2.OrdinalNumber - 1) <br>
AND (DATEDIFF(MINUTE,D1."DateTime",D2."DateTime") >= 60)<br>
Мы ищем разрывы с разницей более 60 минут.
Теперь вы должны взять StartDate
из каждого ряда и сопоставить его с EndDate
из следующего. Так как это 4 утра, я оставлю это вам:)