相关疑难解决方法(0)

比较日期范围

在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)

mysql sql date

114
推荐指数
3
解决办法
5万
查看次数

MySQL - 查找时间重叠

我在数据库中有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个表(Booking,Booked_resource)连接到一个表中,需要4个属性.
  2. 按照此处建议的答案:在一个表中查找重叠(日期/时间)行

我做了第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先生一样的答案!

mysql sql database

6
推荐指数
1
解决办法
1802
查看次数

标签 统计

mysql ×2

sql ×2

database ×1

date ×1