mySQL выберите отметку времени (now () -3000);

Я пытаюсь сделать запрос, который возвращает результаты на основе метки времени, скажем, интервал 30 минут.

Итак, я понял, что могу

SELECT * FROM x WHERE ts BETWEEN timestamp(now()-3000) AND timestamp(now())

таким образом, это будет запрашивать все из x с метками времени в столбце ts в течение последних 30 минут.

однако это работает только после того, как now () прошел отметку yyyy-mm-dd HH:30:00, потому что в любое время до этого это приведет к нулю... это довольно громоздко, и я не понимаю, почему это не просто вычти чертовы минуты из часа!

пожалуйста, помогите мне! Я не мог найти другой метод выполнения запроса в течение последних 30 минут, вот чего я пытаюсь достичь.

С уважением,

Джон

7 ответов


SELECT * FROM x WHERE ts BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW())

SELECT * FROM x WHERE ts BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW();

SELECT * FROM x 
WHERE ts BETWEEN TIMESTAMPADD(MINUTE, -30, NOW()) AND NOW();

прежде всего вам нужно понять, что timestamp() возвращает метку времени unix в секундах. 3000 секунд-это не 30 минут, это должно быть 1800 секунд. попробуйте это


для меня то, что сработало, - это следующий запрос

select * from x where (now() - ts) < 180000

180000 - 30 минут, потому что 6000 МС - 1 минута


вам придется использовать операторы DATE_ADD() и DATE_SUB() для дат. Взгляните на документацию:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html


SELECT * FROM (`yourdb`) WHERE `timestamp` BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW();