SQL 服务器:按开始和结束事件对条目进行分组

SQL Server : group entries by start and end event

不幸的是,我对 SQL 服务器没有太多经验。

我有一个具有以下结构和示例数据的 table:

ID Status TimeStamp
68 2 10.01.2022 08:45:02
52 0 10.01.2022 08:44:29
50 0 10.01.2022 08:41:12
46 0 10.01.2022 08:41:02
40 1 10.01.2022 08:40:07
38 2 10.01.2022 08:20:05
32 0 10.01.2022 08:19:29
30 1 10.01.2022 08:15:34

我现在要做的就是状态1的时间戳为开始,状态2的时间戳为结束,统计中间为0的条目。不幸的是,这些条目不是连续的。所以我不能只向前或向后数 ID。结果应如下所示:

Start End CountStatus0
10.01.2022 08:40:07 10.01.2022 08:45:02 3
10.01.2022 08:15:34 10.01.2022 08:20:05 1

如果您能提供有关如何最好地解决此问题的建议,我将不胜感激。 我已经尝试用 group by 函数解决它,但我还没有成功。

您已标记SQL Server 2008 - 我认为以下是兼容的,当然无法测试。

您可以使用横向连接(交叉应用)来找到应用于每一行的相应end时间戳。

然后简单地按结束时间戳聚合并计算状态为零的行。

with e as (
    select t.timestamp tstart, e.timestamp tend
    from t
    cross apply (
        select Min(timestamp) timestamp
        from t t2
        where t2.status=2
        and t2.timestamp > t.timestamp
    )e
    where status=0
)

select Min(tstart) [Start], Max(tend) [end], count(*) CountStatus0
from e
group by tend
order by [start] desc

example Fiddle