【发布时间】:2021-09-30 03:13:18
【问题描述】:
我被要求将在两分钟内发生的交易分成不同的“日期组”。我很难思考如何按分钟拆分数据。
我在下面写了一个测试表以及预期的“日期组”
CREATE TABLE #tmpData
(ID int,actionDt datetime)
INSERT INTO #tmpData
(ID,actionDt)
VALUES
(1, '7/22/2021 9:51'),
(1, '7/22/2021 9:52'),
(1, '7/22/2021 9:55'),
(1, '7/22/2021 9:56'),
(1, '7/22/2021 9:57'),
(1, '7/22/2021 9:58'),
(1, '7/22/2021 10:00'),
(1, '7/22/2021 10:10'),
(2, '7/22/2021 8:38'),
(2, '7/22/2021 8:39'),
(2, '7/22/2021 8:40'),
(2, '7/22/2021 12:05')
预期的“日期组”应该是
| id | DtGroup |
|---|---|
| 1 | 7/22/2021 9:51 |
| 1 | 7/22/2021 9:55 |
| 1 | 7/22/2021 9:58 |
| 1 | 7/22/2021 10:10 |
| 2 | 7/22/2021 8:38 |
| 2 | 7/22/2021 12:05 |
我在下面写了接近但 ID 1 的时间戳 9:58 和 10:00 应该是他们自己的日期组。
;with resultSet AS
(
SELECT a.id, a.actiondt, a.diff FROM
(
SELECT
id,
actiondt,
diff = datediff(mi,lag(actiondt) OVER (PARTITION BY id ORDER BY actiondt),actiondt)
FROM #tmpdata
) AS a
WHERE diff IS NULL OR diff > 2
)
SELECT
t.id,
t.actiondt AS currDt,
resultset.actiondt AS DtGrp
from #tmpdata t
left JOIN resultset
on t.id = resultset.id
and t.actiondt between dateadd(mi,-2,resultset.actiondt) and dateadd(mi,2,resultset.actiondt)
【问题讨论】:
-
所以你只想要每组的起始行?为什么包含
7/22/2021 9:58,上一行是7/22/2021 9:57 -
@Charlieface 9:58 距离上一个 9:55 发生的日期组超过两分钟。用户希望将操作分组为两分钟间隔:(
标签: tsql sql-server-2016