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:// stackoverflowの.com/questions/41721245/group-records-by-continuous-dates-dates-are-exactly-exactly-continuous) – GurV
おそらくLAG()関数を使用して、以前のレコードが5を超えるレコードを識別できます分離れた。それはあなたに休憩の目標を与えるでしょう。 –