运行SQL Server 2016 Express。SQL Server:按日期时间间隔分组
我有这个表的样本数据:
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或X分钟的间隔或更多当前行日期时间值和下一行日期时间值之间。
我有这种类型的查询,但我不知道在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://计算器.com/questions/41721245/group-records-by-consecutive-dates-when-dates-not-exactly-consecutive) – GurV
您也许可以使用LAG()函数来识别先前记录超过5个记录分钟之外。那会给你休息时间的目标。 –