我正在尝试在 SQL 中创建一个视图,该视图合并开始日期时间和最后一个日期时间,并在知道日期差异的值不固定的情况下更改值列时拆分。例如我有一个表名 Sensors:
传感器ID | 开始时间 | 时间结束 | 价值 |
---|---|---|---|
14033 | 2023-05-01 00:00:00.000 | 2023-05-01 00:05:00.000 | 0 |
14033 | 2023-05-01 00:05:00.000 | 2023-05-01 00:20:00.000 | 1个 |
14033 | 2023-05-01 00:20:00.000 | 2023-05-01 03:00:00.000 | 1个 |
14033 | 2023-05-01 03:00:00.000 | 2023-05-01 12:00:00.000 | 1个 |
14033 | 2023-05-01 12:00:00.000 | 2023-05-01 20:00:00.000 | 0 |
14033 | 2023-05-01 20:00:00.000 | 2023-05-01 22:59:59.000 | 0 |
结果必须如下表所示:
传感器ID | 开始时间 | 时间结束 | 价值 |
---|---|---|---|
14033 | 2023-05-01 00:00:00.000 | 2023-05-01 00:05:00.000 | 0 |
14033 | 2023-05-01 00:05:00.000 | 2023-05-01 12:00:00.000 | 1个 |
14033 | 2023-05-01 12:00:00.000 | 2023-05-01 22:59:59.000 | 0 |
基于此示例,这里有一段代码,灵感来自 Itzik Ben-Gan,这里是特殊岛屿解决方案的链接。
(我添加了 CTE 以便更好地理解)
输出:
小提琴手
在第 1 步(第一个)中,我们只计算和 的
select
先前值EndTime
Value
StartTime
第 2 步,如果and之间存在差异,或者andprevious EndTime
之间存在差异,那么我们将这一行标记为Value
previous Value
1 = IsGrp
在第 3 步中,我们
SUM
在这个新字段 (isGrp) 上应用。最后一步/选择只是聚合这些信息以显示所需的输出