Как выбрать все записи, которые составляют 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() для объяснения того, как она используется.