Ответ 1
SELECT * FROM x WHERE ts BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW())
Я пытаюсь сделать запрос, который возвращает результаты на основе метки времени, скажем, интервал в 30 минут.
Итак, я понял, что могу
SELECT * FROM x WHERE ts BETWEEN timestamp(now()-3000) AND timestamp(now())
Таким образом, это будет запрашивать все от x с отметками времени в столбце ts за последние 30 минут.
Однако это работает только после того, как() прошло мимо знака HY: 30: 00 yyyy-mm-dd, потому что в любое время до его появления NULL... это довольно громоздко, и я не понимаю, почему он выиграл 't просто вычитайте минуты с часами!
Пожалуйста, помогите мне! Я не мог найти какой-либо другой метод выполнения запроса за последние 30 минут, чего я пытаюсь достичь.
С уважением,
Джон
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();