gpt4 book ai didi

mysql - 查找一个表中不重叠(日期/时间)的行

转载 作者:行者123 更新时间:2023-11-29 17:50:36 24 4
gpt4 key购买 nike

我有一个表,其中存储 2 个日历事件,每行都是一个 session ,其中包含 event_id (int)、calendar_id (int - 1/2)、开始(日期时间)和结束(日期时间)。

期望的输出:新表的 event_id 来自 calendar_id(1),开始和结束没有与来自 calendar_id(2) 的事件重叠的事件。

例如,对于以下输入: table example

eventid | calendaid | start        | end
101 | 1 | 1/1/10 20:00 | 1/1/10 22:00
102 | 2 | 1/1/10 20:00 | 1/1/10 21:00
103 | 1 | 1/1/10 22:00 | 1/2/10 02:00
104 | 2 | 1/1/10 22:00 | 1/2/10 02:00
105 | 1 | 1/2/10 01:00 | 1/2/10 05:00
106 | 2 | 1/2/10 01:00 | 1/2/10 02:00
107 | 1 | 1/2/10 05:00 | 1/2/10 06:00
108 | 2 | 1/2/10 05:00 | 1/2/10 08:00
109 | 1 | 1/2/10 06:00 | 1/2/10 08:00
110 | 2 | 1/2/10 03:00 | 1/2/10 04:00

输出应如下所示:

eventid | start        | end 
101 | 1/1/10 21:00 | 1/1/10 22:00
105 | 1/2/10 02:00 | 1/2/10 03:00
105 | 1/2/10 04:00 | 1/2/10 05:00

有没有办法在MySQL中执行这样的查询?

最佳答案

我认为你可以使用相关子查询来做到这一点:

select c.*
from calendars c
where c.calendarid = 1 and
not exists (select 1
from calendars c2
where c2.calendarid = 2 and
c2.start < c.end and
c2.end > c.start
);

重叠逻辑假设仅在开始/结束日期时间重叠的事件不重叠。

没有特别有效的方法来实现这个逻辑。 (日历、开始、结束) 上的索引可能会有所帮助。

关于mysql - 查找一个表中不重叠(日期/时间)的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393077/

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