我有一个mysql表:
--------------
booked_dates
--------------
2017-11-28
2017-11-27
2017-11-26
2017-11-25
2017-11-24
2017-11-23
2017-11-22
2017-11-21
2017-11-20
2017-11-19
2017-11-18
2017-11-17
2017-11-07
2017-11-06
2017-11-05
2017-11-04
2017-11-03
2017-11-02
2017-11-01
--------------
我有一个搜索表单,我将其设置为返回YES或NO(可用性)
如果人们在2017-11-02(至)和2017-11-26(来自)之间进行搜索并检查3天的时段,则搜索应返回YES,因为2017-11之间有3天免费07和2017-11-17。
我一直在尝试使用TIMESTAMPDIFF,但却在努力寻找合适的查询。
答案 0 :(得分:1)
相关子查询可能是最简单的解决方案。在每个booking_date之后执行“下一个日期”,然后计算差异(以天为单位)。如果该期间等于或超过比较期间,则返回yes。可选择返回最大可用时间段。
查询1 :
select
case when max(avail) >= 3 then 'Yes' else 'No' end is_avail
, max(avail) max_period
from (
select
datediff(
(select booked_date from booked_dates n
where n.booked_date > b.booked_date
order by n.booked_date
limit 1)
, booked_date
) avail
from booked_dates b
where b.booked_date between '2017-11-02' and '2017-11-26'
) a
<强> Results 强>:
| is_avail | max_period |
|----------|------------|
| Yes | 10 |
答案 1 :(得分:0)
你怎么知道哪一天是自由的一天
SELECT IF(count(a.dates)>=3,'Yes','No')availability
FROM booked_dates a
left join (
SELECT w.dates
FROM booked_dates w where w.dates between '2017-11-07' and '2017-11-17'
) free on free.dates = a.dates
where a.dates between '2017-11-02' and '2017-11-26'
and free.dates is not null