Я пытаюсь выбрать сообщения, которые добавлены в последний час с текущего времени. Я изучил предыдущие вопросы, но они используют фиксированную дату или дату и время. Для этого я использую следующий запрос:
SELECT * FROM `wp_posts`
WHERE post_date >= SUBTIME(CURRENT_TIMESTAMP(), "1:0:0")
and post_date <= CURRENT_TIMESTAMP();
Этот запрос не отображает никаких результатов. Когда, когда я использую его без И, он просто работает идеально. Итак, как выбрать записи предыдущего часа, используя текущее время и время, поскольку я использую для этого CURRENT_TIMESTAMP()?
Вам действительно нужно <= CURRENT_TIMESTAMP()? Может ли дата публикации быть в будущем>?
Можете ли вы воспроизвести проблему с примерами данных в скрипте ?
это прекрасно работает dbfiddle.uk/nGDj02cd
@Barmar, да, пост может иметь даты в будущем
Если это работает без AND post_date <= CURRENT_TIMESTAMP(), все ваши последние сообщения должны быть в будущем, у вас нет ни одного за предыдущий час.


create table wp_posts(
id int,
post_date datetime);
insert into wp_posts(id, post_date)
values(1, '2023-04-20 08:15:00'),
(2, '2023-04-21 18:5:00'),
(3, '2023-04-21 18:1:00'),
(4, '2023-04-21 18:16:00'),
(5, '2023-04-21 18:25:00'),
(6, '2023-04-20 18:30:00');
select current_timestamp
Запрос:
SELECT * FROM `wp_posts`
WHERE post_date > now() - interval 1 hour;
Выход:
Я проверил ваш код, и он отлично работает для меня. Если строка не отображается, это означает, что между CURRENT_TIMESTAMP() и 1 часом назад нет post_date.
С другой стороны, если мы предположим, что post_date всегда будет меньше вашего CURRENT_TIMESTAMP() (я не знаю, ваш ли это случай; вы не указали), в качестве предложения вы можете улучшить свой код, просто просто делаю это.
SELECT * FROM `wp_posts`
WHERE post_date >= SUBTIME(CURRENT_TIMESTAMP(), "1:0:0")
Если post_date всегда меньше, чем CURRENT_TIMESTAMP(), нет необходимости его включать.
WHERE post_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 HOUR) AND NOW()