Я использую 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-01
validTill=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
Это было бы справедливо только на скоростях, чем свет – Strawberry
@Strawberry, как получилось? – Shadow
Время линейно, поэтому критерии перекрытия проще. См. Мой пример ниже. – Strawberry