【发布时间】:2020-03-09 18:23:32
【问题描述】:
我有一张桌子,基本上就是我下面的桌子。对于每个 Event1 记录,有多个 Event2 记录,每个记录都有一个状态。
Event1 Event2 Status
-------- -------- --------
1 1 Start
1 2 Middle
1 3 Middle
1 4 End
1 5 Start
1 6 Middle
1 7 Middle
2 10 Start
2 11 Middle
2 12 End
2 13 Start
2 14 End
2 15 Start
我希望能够对数据进行分组,以同时显示所有独特的开始状态和匹配的结束状态。所有 ID 都是按时间顺序编写的,因此每个 Event2 分组都将以 Start 状态开始,然后可能有也可能没有中间状态,然后可能以 End 状态结束。每个 Event1 记录不应有两个或多个 Start 状态,它们之间没有 End 状态。
Event1 StartEvent2 EndEvent2
-------- ------------ -----------
1 1 4
1 5 NULL
2 10 12
2 13 14
2 15 NULL
你能帮我用 SQL 查询来生成这个结果吗?谢谢。
编辑:我忘了提到在“结束”事件之前可能不止“开始”事件。但我需要忽略中间的“开始”事件,只保留第一个“开始”。所以它可以开始>开始>中间>结束,但我只想保留第一个开始和结束。
【问题讨论】:
-
是的,我有。但我还没有完全正确,只是因为数据的时髦。必须用完,所以我稍后再回复。
标签: sql sql-server database window-functions gaps-and-islands