@atachrus

Как правильно составить SQL с интервалом дат?

Если в вкратце, то скрипт запускается каждые 15 минут. Его задача выбрать все записи (для запуска скрипта для оповещения), у которых поле время-дaтa (timestamp) будет через 30 минут от текущего. Т.е. между (+ 30 минут и + 45 мин), но что то я намудрил с запросом и мне кажется что это не правильно.
SELECT id FROM TABLE WHERE event_date between NOW() + INTERVAL 30 MINUTE and NOW() + INTERVAL 45 MINUTE

Проблема в том, что сервер иногда бывает нагружен и скрипт иногда может сработать не во время и тогда точка NOW() смещается на секунды и некоторые записи не попадают. И ещё есть подозрение, что одна и та же запись будет выбираться повторно.

Помогите грамотно составить запрос
  • Вопрос задан
  • 597 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Из-за разного времени задержки при запуске скрипта часть записей может быть выбрана несколько раз, а часть не выбрана вообще. Кроме того, даже при моментальном запуске записи на время, кратное 15 минутам будут выбираться дважды, поскольку BETWEEN выбирает включительно.
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
Вам же надо не столько now(), сколько точное время? Т.е. 11:15:00? ну так и берите ближайшее точное время, плюс делайте не between, а < и >.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы