我有一系列按时间顺序依次发生的事件。为了方便起见,我将事件四舍五入到 1 分钟。有时,同一事件发生在同一事件之后,本质上使其成为同一事件。
基础数据如下所示:
create table #Events (StartTime datetime,EndTime datetime,Activity varchar(55)) insert into #Events (Start,End,Activity) select '2017/09/19 10:01','2017/09/19 10:15','Play' insert into #Events (Start,End,Activity) select '2017/09/19 10:16','2017/09/19 11:00','Subject 1' insert into #Events (Start,End,Activity) select '2017/09/19 11:01','2017/09/19 11:12','Subject 1' insert into #Events (Start,End,Activity) select '2017/09/19 11:13','2017/09/19 11:15','Play' insert into #Events (Start,End,Activity) select '2017/09/19 11:16','2017/09/19 11:25','Play' insert into #Events (Start,End,Activity) select '2017/09/19 11:26','2017/09/19 12:14','Subject 2' insert into #Events (Start,End,Activity) select '2017/09/19 12:15','2017/09/19 12:25','Subject 2' insert into #Events (Start,End,Activity) select '2017/09/19 12:26','2017/09/19 12:35','Subject 2' insert into #Events (Start,End,Activity) select '2017/09/19 12:36','2017/09/19 12:45','Play'
实现这一目标的最佳方法是什么?
最佳答案
一种方法是使用行号的差异来对事件岛进行分组。例如:
SELECT Start = MIN(StartTime), [End] = MAX(EndTime), Activity
FROM (
SELECT *, RN = ROW_NUMBER() OVER (ORDER BY StartTime) - ROW_NUMBER() OVER (PARTITION BY Activity ORDER BY StartTime)
FROM #Events
) AS E
GROUP BY Activity, RN;
关于sql-server - 在时间线 SQL Server 中对事件进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310835/