如果它们不在“组”中的第一个项目的 30 秒内,我正在尝试计算项目的数量。我很难弄清楚这一点。
所以,我有这张桌子:
WITH ADates AS (
SELECT
Id
, SharedId
, TheDateTime
FROM (VALUES
(CAST(1 AS int), CAST(1 AS int), CAST('2019-01-01 01:01:00.00' AS datetime2(7))),
(2, 1, '2019-01-01 01:01:33.00'),
(3, 1, '2019-01-01 01:02:00.00'),
(4, 1, '2019-01-01 01:02:01.00'),
(5, 1, '2019-01-01 01:02:04.00'),
(6, 1, '2019-01-01 01:06:15.00'),
(7, 2, '2019-01-01 01:06:00.00'),
(8, 2, '2019-01-01 01:06:45.00'),
(9, 1, '2019-01-01 01:02:31.00'),
(10, 2, '2019-01-01 01:06:05.00'),
(11, 2, '2019-01-01 01:06:46.00'),
) X (Id, SharedId, TheDateTime)
)
所以,我正在寻找的预期结果是:
+==========+=======+
| SharedId | Count |
+==========+=======+
| 1 | 4 |
+----------+-------+
| 2 | 2 |
+----------+-------+
数字由以下因素决定:
- 从新组中的第一个开始计数。
- 不在前一组的 30 秒内,因此它是一个新组并计数。
- 不要计算,因为它在 2 的 30 秒内。
- 不要计算,因为它在 2 的 30 秒内。
- 从前一组的 30 秒内开始计数(第 2 项)。
- 从前一组的 30 秒内开始计数(第 2 项)。
- 计算 SharedId 的新组。
- 计数,因为不在先前的分组内。
我想我应该为此做一个Window Function
。只是不知道如何让它依赖于小组中的第一个。