2016-01-19 5 views
0

Я использую MySQL, я следующую структуру таблицыкак найти перекрывающихся запись с датой между

Id id2 classId sectionId validFrom validTill 
------------------------------------------------------ 
1 1  5  13  2016-01-01 2016-03-30 
2 1  5  22  2016-01-15 2016-03-30 
3 1  5  23  2016-01-15 2016-04-29 
4 1  5  13  2016-04-01 2016-04-30 
9 10  6  24  2016-01-17 2016-02-05 
10 10  6  25  2016-01-23 2016-02-05 
11 10  6  24  2016-01-31 2016-02-05 

My SQL заявление

SELECT count(*) as timeCount FROM TimeTableClassSection a 
WHERE classId=5 AND sectionId=13 AND ((a.ValidFrom BETWEEN '2016-01-18' AND '2016-01-24') OR (a.ValidTill BETWEEN '2016-01-18' AND '2016-01-24')) 

Его возвращающиеся timeCount = 0. Но он должен вернуть 1, поскольку запись с Id = 1 падает между этим диапазоном дат ('2016-01-18' AND '2016-01-24')

Я пытаюсь найти, найти любую перекрывающуюся запись для определенного классаId & sectionId между предоставленным диапазоном дат. Если classId=5 и sectionId=13 есть validFrom=2016-01-01validTill=2016-03-30 существуют, то любой диапазон дат между этим диапазоном дат ('2016-01-18' AND '2016-01-24') должен бросить эту запись как счет.

If I give date range 2015-12-25 to 2016-09-20 then record count should = 1 
If I give date range 2016-2-1 to 2016-02-20 then record count should = 1 
If I give date range 2016-2-1 to 2016-09-20 then record count should = 1 

Что плохого я здесь делаю ... все формат даты в формате YYYY-MM-DD

ответ

0

Вы только проверяете, если границы находятся в пределах диапазона дат, но вы не проверить, является ли диапазон данных находится в пределах границ. Вы должны расширить свои критерии:

...AND ((a.ValidFrom BETWEEN '2016-01-18' AND '2016-01-24') 
     OR (a.ValidTill BETWEEN '2016-01-18' AND '2016-01-24') 
     OR (a.ValidFrom<'2016-01-18' AND a.ValidTill>'2016-01-24')) 
+0

Это было бы справедливо только на скоростях, чем свет – Strawberry

+0

@Strawberry, как получилось? – Shadow

+0

Время линейно, поэтому критерии перекрытия проще. См. Мой пример ниже. – Strawberry

Смежные вопросы