Mysql选择与预订日期范围不相交的日期

时间:2014-08-22 08:45:20

标签: mysql select date-range

我有一个日期表,每个日期代表一个任务,任务需要三天才能完成。 我想选择与其他预订任务不相交的所有未预订日期。 我现在已经尝试和谷歌搜索了三天,我认为是时候寻求帮助了。

date         booked
=========== =======
2014-09-01    0
2014-09-02    1
2014-09-05    0
2014-09-10    1
2014-09-15    0
2014-09-16    0
2014-09-20    1
2014-09-25    0

预期结果:

date         booked
=========== =======
2014-09-01    0
2014-09-15    0
2014-09-16    0
2014-09-25    0

2 个答案:

答案 0 :(得分:1)

请参阅以下答案。

Detect overlapping date ranges from the same table

如果您可以将日期更改为Start_Date并添加End_Date列(Start_Date + 3),则在引用的答案中添加NOT将导致您的答案没有重叠的日期范围。

select dr1.* from date_ranges dr1
inner join date_ranges dr2
where NOT (dr2.start > dr1.start -- start after dr1 is started
  and dr2.start < dr1.end) -- start before dr1 is finished 

从上述查询的结果中,您可以选择预订列为0的行。

答案 1 :(得分:1)

您可以使用左连接(在日期列中添加3天),在同一个表上使用null以获取未预订的日期,并且不与其他任务的预订日期相交

select t.*,
t1.date date1
from t
left join t t1 on(t.date = t1.date + interval 3 day)
where t.booked = 0 and t1.date is null

Fiddle Demo