在MySQL中,如果我有一个日期范围列表(范围开始和范围结束).例如
10/06/1983 to 14/06/1983
15/07/1983 to 16/07/1983
18/07/1983 to 18/07/1983
Run Code Online (Sandbox Code Playgroud)
我想检查另一个日期范围是否包含列表中已有的任何范围,我该怎么做?
例如
06/06/1983 to 18/06/1983 = IN LIST
10/06/1983 to 11/06/1983 = IN LIST
14/07/1983 to 14/07/1983 = NOT IN LIST
Run Code Online (Sandbox Code Playgroud) 我在数据库中有2个表,具有以下属性:
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
Run Code Online (Sandbox Code Playgroud)
第二个表是"预订"和"资源"之间的关联实体(即,1个预订可以包含许多资源).属性booking_start和booking_end是包含日期和时间的时间戳.
如果日期/时间与其他类似resource_id的预订重叠或冲突,我可以知道如何找到每个resource_id(resource_booked)吗?
我正在纸上涂抹答案,以图形方式,看看它是否可以帮助我想象我如何解决这个问题,我得到了这个:
我做了第1步,但第2步让我感到困惑!
我真的很感激任何帮助!谢谢!
编辑:我正在阅读Renshaw先生的答案,并尝试自己做一个,看看我是否理解,我得到了这个概念:
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
Run Code Online (Sandbox Code Playgroud)
我想我正在尝试创建两个相同的表并使用resource_id连接它们,查找具有相似资源ID但不同booking_id的记录,并查看一个(booking_id)的booking_start日期时间是否在另一个(booking_id)的booking_start和booking_end之间.
它真的很乱,我甚至不确定我的询问是否在考虑我的想法但是有些奇迹,我得到了和Renshaw先生一样的答案!