2013-11-27 4 views
1

Мне трудно получить эту логику в самый раз. Мне нужно получить все строки, соответствующие двум временным меткам unix.Получение всех строк между двумя временными отметками

В этом примере бронирование №1 уже существует в базе данных. Время от бронирования № 2 должно было вернуть данные с бронирования №1, но это не работает.

Может кто-нибудь показать мне, где я иду не так?

booking #1 start = 1385546460 = 11/27/13 @ 10:01:00am UTC 
booking #1 stop = 1385593140 = 11/27/13 @ 10:59:00pm UTC 

booking #2 start = 1385560860 = 11/27/13 @ 2:01:00pm UTC 
booking #2 stop = 1385567940 = 11/27/13 @ 3:59:00pm UTC 

SELECT 
    t1.start 
, t1.stop 
, t1.booking_id 
FROM booking AS t1 
WHERE t1.location_id = 1 AND 
(t1.start BETWEEN '1385560860' AND '1385567940' OR t1.stop BETWEEN '1385560860' AND '1385567940') 

ответ

0

Бронирование 1 проходит от приблизительно 10:00 - 22:00 и бронирование 2 с 14:00 - 16:00, так что, конечно, ни конца Бронирование 1 появится между концами Заказ 2.

Я думаю, а вы хотите, чтобы вычислить перекрытия отрезков:

WHERE t1.start <= t2.stop 
     AND 
     t1.stop >= t2.start 

Этой формулировка получит перекрывающиеся диапазоны, как люди обычно думают о них. Учитывая приведенную ниже диаграмму, он обнаруживает, что A, B, C и D перекрываются с «Window», но E и F этого не делают.

(time) ==========================> 

Window:  |-------| 
    A: |-----| 
    B:  |--| 
    C: |------------| 
    D:   |-------| 
    E: |-| 
    F:     |-----| 
+0

Благодарим за установку меня прямо на этом. – NaN

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