2015-06-11 3 views
0

Так, например, если у меня было две таблицы, communication и movement, что оба имеют столбцы с именем ID и timestamp, и у меня был запрос, который обычно выглядел примерно так:SQL - Как получить диапазон временных меток с использованием BETWEEN (mysql)?

SELECT * FROM movement m 
JOIN communication c 
ON m.ID = c.ID 
WHERE m.timestamp <= c.timestamp 
ORDER BY abs(TIMESTAMPDIFF(second,ctstamp,m.timestamp)) 
LIMIT 1; 

Это находит ближайший communication метку времени для заданной movement отметки времени, когда m.timestamp <= c.timestamp, то есть, когда movement timestamp меньше, чем communication timestamp. Но это не все m.timestamp >= c.timestamp.

То, что я хочу сделать, это создать ряд как 10 секунд с обеих сторон, так что было бы:

WHERE m.timestamp BETWEEN c.timestamp-10 secs AND c.timestamp+10 secs 

так, если communication timestamp был '2012-03-02|09:02:30', то это было бы:

WHERE m.timestamp BETWEEN '2012-03-02|09:02:20' AND '2012-03-02|09:02:40' 

Итак, как бы реализовать это?

Любая помощь будет принята с благодарностью, спасибо!

EDIT

В конце концов, я использовал это:

WHERE m.timestamp BETWEEN TIMESTAMPADD(SECOND,-10,c.timestamp) 
AND TIMESTAMPADD(SECOND,10,c.timestamp); 

ответ

2

Просто используйте interval ключевое слово:

WHERE m.timestamp BETWEEN c.timestamp - interval 10 second AND 
          c.timestamp + interval 10 second 
+0

Спасибо! Мне нужно было бы «интервал» пользователя в сочетании с ['timestampadd()'] (https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampadd), правильно? Вроде как в [this] (http://stackoverflow.com/questions/2793619/working-with-interval-and-curdate-in-mysql) вопрос? – ocean800

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