Как выбрать все записи, которые составляют 10 минут в текущей временной отметке в MySQL?
У меня есть метки времени в столбце таблицы, называемом "last_seen", например:
2012-01-25 18:46:42
2012-01-23 08:19:04
2012-01-23 08:19:04
etc...
Как я могу получить все записи, где метка времени находится в пределах 10 минут от текущей метки времени (наиболее эффективным способом)?
Ответы
Ответ 1
Наиболее эффективным способом было бы сравнить вашу метку времени (и только временную метку без использования каких-либо функций на ней) для выражения, которое может быть рассчитано как константа для каждой строки, таким образом mysql может использовать индекс, определенный в столбце timestamp.
SELECT * FROM myTable
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE
Вы всегда можете попробовать EXPLAIN SELECT ...
, чтобы узнать, можно ли использовать индекс для поиска строк, удовлетворяющих вашему условию WHERE, без необходимости проверять каждую строку в таблице.
Ответ 2
Ваш вопрос запрашивает записи в течение 10 минут с текущей отметки времени, но я буду считать, что это означает не более десяти минут в прошлом (а не в будущем):
SELECT col1, col2, col3
FROM table
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW();
Это добавляет 10 минут к last_seen
и сравнивает это с текущим временем. Если значение больше, last_seen
меньше десяти минут назад.
Обратитесь к документации на DATE_ADD()
для объяснения того, как она используется.