gpt4 book ai didi

SQL - 根据开始和结束事件将记录组合​​在一起

转载 作者:行者123 更新时间:2023-12-04 21:48:33 24 4
gpt4 key购买 nike

我有一张表格,基本上就是下面的表格。对于每个 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 分组都将以开始状态开始,然后可能有也可能没有中间状态,然后可能以结束状态结束。每个 Event1 记录不应有两个或多个开始状态,而它们之间没有结束状态。

  Event1   StartEvent2   EndEvent2  
-------- ------------ -----------
1 1 4
1 5 NULL
2 10 12
2 13 14
2 15 NULL

你能帮我用 SQL 查询来生成这个结果吗?谢谢。

编辑:我忘了提到在“结束”事件之前可能不止是“开始”事件。但我需要忽略中间的“开始”事件,只保留第一个“开始”。所以它可以开始>开始>中间>结束,但我只想保留第一个开始和结束。

最佳答案

这实际上很简单,只需一点条件聚合和一个窗口函数:

WITH Grps AS(
SELECT V.Event1,
V.Event2,
V.[status],
COUNT(CASE V.[Status] WHEN 'Start' THEN 1 END) OVER (PARTITION BY V.Event1 ORDER BY V.Event2) AS Grp
FROM (VALUES(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'))V(Event1,Event2,[Status]))
SELECT Event1,
MAX(CASE [Status] WHEN 'Start' THEN Event2 END) AS StartEvent2,
MAX(CASE [Status] WHEN 'End' THEN Event2 END) AS StartEvent2
FROM Grps
GROUP BY Event1,
Grp;

关于SQL - 根据开始和结束事件将记录组合​​在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58845844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com