Запуск SQL Server 2016 Express.SQL Server: группа по времени datetime
У меня есть эта таблица с данными выборки:
ID Datetime2 other columns
------------------------------------------
1 2017-01-14 11:00:00 ...
1 2017-01-14 11:01:00 ...
1 2017-01-14 11:02:00 ...
1 2017-01-14 11:03:00 ...
1 2017-01-14 11:10:00 ... --> 7 minutes gap
1 2017-01-14 11:11:00 ...
1 2017-01-14 11:20:00 ... --> 9 minutes gap
1 2017-01-14 11:22:00 ...
1 2017-01-14 11:24:00 ...
Я хочу иметь такой результат
ID start end other columns
-----------------------------------------------------------
1 2017-01-14 11:00 2017-01-14 11:03 ...
1 2017-01-14 11:10 2017-01-14 11:11 ...
1 2017-01-14 11:20 2017-01-14 11:24 ...
Новая группа должна меня возникает, когда мы имеем зазор 5 или Х минут или больше между текущим значением даты и времени строки и значением даты и времени следующей строки.
У меня такой запрос, но я не могу понять, где группировать строки, когда у него есть пробел 5 минут и более.
WITH groups(DateTimeField, grp) AS
(
SELECT DISTINCT
DateTimeField,
DATEDIFF(MINUTE, DateTimeField, lag(DateTimeField) OVER (ORDER BY DateTimeField DESC)) grp
FROM
MyTable
WHERE
ID = 1
)
SELECT
COUNT(*) AS consecutiveDates,
MIN(DateTimeField) AS minDate,
MAX(DateTimeField) AS maxDate
FROM
groups
GROUP BY
grp
ORDER BY
1 DESC, 2 DESC
С наилучшими пожеланиями,
Возможный дубликат [Групповые записи по датам подряд, когда сроки не совсем последовательным] (HTTP: // StackOverflow .com/questions/41721245/group-records-by-последовательные-даты-когда-даты-не-точно-последовательные) – GurV
Возможно, вы можете использовать функцию LAG() для идентификации записей, в которых предыдущая запись была больше 5 минут. Это даст вам цели для перерывов. –