event_id|event_start|event_end
A 1 10
B 2 11
C 5 15
D 9 12
E 10 13
F 11 20
G 14 22
H 15 22
I 17 27
J 22 27
我有一个如上所述的表格,但我需要这样的预期输出
预期输出:
event_id|event_start|event_end
A 1 10
E 10 13
G 14 22
J 22 27
上述日期之间没有逻辑重叠
答案 0 :(得分:0)
您可以起诉相关子查询以获取下一个可能事件的ID。然后使用递归CTE通过加入该ID依次添加下一个事件。
以下是Postgres中的示例:
WITH RECURSIVE cte
AS
(
SELECT t1.*,
(SELECT t2.event_id
FROM elbat t2
WHERE t2.event_start >= t1.event_end
ORDER BY t2.event_start,
t2.event_id
LIMIT 1) next_event_id
FROM elbat t1
WHERE t1.event_id = 'A'
UNION ALL
SELECT t1.*,
(SELECT t2.event_id
FROM elbat t2
WHERE t2.event_start >= t1.event_end
ORDER BY t2.event_start,
t2.event_id
LIMIT 1) next_event_id
FROM elbat t1
INNER JOIN cte c
ON c.next_event_id = t1.event_id
)
SELECT event_id,
event_start,
event_end
FROM cte
ORDER BY event_start;