MySQL выборка записей созданных более часа назад

Есть табличка table с полем date типа datetime, у которого значение по умолчанию установлено CURRENT_TIMESTAMP. Соответственно при создании записей в такой табличке, в поле date лежат даты создания. Мне нужно выбрать все записи созданные более часа назад, как мне лучше это сделать?

Пробовал так:

SELECT * FROM table WHERE date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

Но получается какая-то ерунда...

UPD.

Я понял в чем дело, но не знаю как пофиксить. Запрос вида

SELECT * FROM table WHERE date <= CURRENT_TIMESTAMP() - INTERVAL 1 HOUR;

или

SELECT * FROM table WHERE date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

действительно возвращает правильный результат, но у меня запрос сложнее (вот уж не думал, что это может оказаться граблями). В table есть еще одно поле - status типа tinyint(1) и значением по умолчанию 0. И когда мой запрос выглядит так:

SELECT * FROM table WHERE status = 0 AND date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

или так

SELECT * FROM table WHERE status <> 1 AND date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

то выборка получается неправильная. Причем если сделать отдельно:

SELECT * FROM table WHERE status = 0;

то все нужные записи там будут.

Как бы это пофиксить?


Ответы (2 шт):

Автор решения: posix
SELECT * FROM table WHERE status = 0 AND UNIX_TIMESTAMP(date) <= UNIX_TIMESTAMP() - 3600;
→ Ссылка
Автор решения: zerxa

Вы можете использовать SQL-запрос с условием WHERE и функцией DATE_SUB.

SELECT * FROM [Your table]
WHERE date < DATE_SUB(NOW(), INTERVAL 1 HOUR);

Собственно, ничего сложного. Мы получаем все записи и все столбцы *, которые были созданы час назад.

Чтобы добавить другие фильтры для WHERE мы можем использовать оператор AND, пример запроса с записями, которые были созданы час назад и которые имеют status = 1:

SELECT * FROM [Your table]
WHERE date < DATE_SUB(NOW(), INTERVAL 1 HOUR)
AND status = 0;
→ Ссылка