Как сравнить записи по дате и вернуть только те, которые соответствуют условию? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть таблица, содержащая список teams, у каждого team есть поле с именем update_at, в котором указывается datetime последнего обновления.

Мне нужно проверять каждоеteam если необходимо обновить.Сначала я создал запрос вроде:

SELECT update_at FROM team WHERE id = 67

, а затем сравнил update_at с 7 (что является максимальным числом дней между обновлением и другим).

Это решениеэто дорого, потому что если у меня 50 teams, мне нужно открыть 50 соединений и выполнить 50 query.

Так что я думаю, что-то в этом роде:

SELECT id FROM `team` WHERE (id = 67 AND update_at > DATE_SUB(SYSDATE(), Interval 7 Day)) 
                      AND id = 68 AND update_at > DATE_SUB(SYSDATE(), Interval 7 Day)) 

Первая проблемавот избыточность, я не эксперт sql, поэтому я не знаю, возможно ли избегать добавления каждый раз DATE_SUB(SYSDATE(), Interval 7 Day).

Вторая проблема заключается в том, что запрос не возвращаетчто угодно.

Структура таблицы следующая:

id | name     | update_at
67   Tirana     2019-03-06 11:00:12  
68   Partizan   2019-03-06 11:02:04  
69   Lusitanos  2019-03-14 09:00:40

Ожидаемый результат - 67, 68, поскольку update_at меньше, чем 7 дней от текущей даты.Запись 69 была обновлена ​​только 2 дня назад с сегодняшнего дня (2019-03-16).

ОБНОВЛЕНИЕ:

Дубликат не соответствует всем требованиям вопроса.Поскольку мне нужно возвращать идентификатор каждой записи, которая имеет поле update_at менее чем за 7 дней от текущей даты, не сравнивать все поля, как другой вопрос -

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Если я правильно понимаю, вы не хотите знать, для каких идентификаторов в таблице отсутствуют последние обновления.Скорее, у вас есть набор идентификаторов, для которых вы хотите получить эту информацию.

Это будет просто:

SELECT id
FROM team
WHERE update_at < DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
AND id IN (10, 22, 34, 56 ...);
1 голос
/ 16 марта 2019

просто проверьте update_at> до 7 дней, и у mysql doest есть sysdate, поэтому вы используете CURDATE()

SELECT id FROM `team` WHERE update_at <= DATE_SUB(CURDATE(), Interval 7 Day)`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...