Я прочел темы и искал другой форум, но не повезло.mysql date compare not working
У меня есть две таблицы, AYEAR и график, как показано здесь
AYEAR
ay Block Block_start_date Block_end_date
1213 4 2012-07-09 2013-05-13
1314 4 2013-07-01 2014-05-09
1415 4 2014-06-23 2015-05-08
1516 4 2015-07-06 2016-05-09
1617 4 2016-04-11 2017-05-01
ГРАФИК
scheduleid sched_start_date sched_end_date
59576370 2016-04-11 2016-05-06
...
...
...
Моя запланированное событие между 2016-04-11 и 2016-05-06. Я хочу знать, какой из этих периодов приходится на этот таймфрейм.
Я бегу следующий запрос
Select ay, scheduleid, sched_start_date, sched_end_date
from schedule, ayear o
where scheduleid = 59576370
and block = 4
and sched_start_date >= (select max(block_start_date)
from ayear i
where i.block= o.block
and sched_start_date >= i.block_start_date
and sched_end_date <= i.block_end_date
)
and sched_end_date <= (select max(block_end_date)
from ayear i
where i.block= o.block
and sched_start_date >= i.block_start_date
and sched_end_date <= i.block_end_date
)
Это дает мне это:
ay sched sched_start_date sched_end_date block_start_date block_end_dt
1213 59576370 2016-04-11 2016-05-06 2012-07-09 2013-05-13
1314 59576370 2016-04-11 2016-05-06 2013-07-01 2014-05-09
1415 59576370 2016-04-11 2016-05-06 2014-06-23 2015-05-08
1516 59576370 2016-04-11 2016-05-06 2015-07-06 2016-05-09
1617 59576370 2016-04-11 2016-05-06 2016-04-11 2017-05-01
Когда я ожидаю получить только последнюю строку.
Все поля даты в обеих таблицах определяются как даты.
Я думаю, мой вопрос в том, как мне определить перекрывающиеся диапазоны времени?
Моя запланированное событие между 4/11/16 и 5/6/16. Я хочу знать, какой из этих периодов приходится на этот таймфрейм. – alex
Вы правы, но почему бы не отфильтровать, где block_start_date и block_end_date выходят за пределы sched_start_date и sched_end_date. – alex
ОК. так что не так. Я пытаюсь вытащить все строки из ayear, где sched_start_date и sched_end_date находятся между block_start_date и block_end_date, предоставили мне как 1516, так и 1617. Почему сравнение sched_start_date> = (выберите max (.... и sched_end_date <= (select (max не имеет никакого эффекта – alex