Вы на правильном пути. По сути, это INSERT с предложением WHERE. Итак, вам нужно создать запись в таблице «Чтения» для датчиков, которые имеют ОБНОВЛЕНИЕ за последние X дней (10 в моем примере ниже)
Что-то вроде:
insert into readings
select 1 as id, id as sens_id, null as info
from sensors
where datediff(now(),latest_update) > 10;
В моем примере я предоставляю идентификатор, но я предполагаю, что это целое число автоинкремента в вашем BD ...
, а затем обновите поле ОБНОВЛЕНИЕ ...
update sensors set latest_update = now()
where datediff(now(),latest_update) > 10;
Иди, попробуй сам ...
https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/0
ОБНОВЛЕНИЕ:
https : //www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/1
Если last_update проиндексирован, я предлагаю вместо этого:
where date_add(now(),INTERVAL -10 DAY) > latest_update;
, чтобы извлечь выгоду из индексации.
«Когда вы оборачиваете функцию вокруг индексированного столбца, SQL Server должен вычислить значение функции для каждой строки в таблице. Когда вы просто сравниваете индексированный столбец со скалярным значением или результатом функции, SQL Server может используйте это значение для поиска в индексе. "
Не совсем точно для MySQL, поскольку я не проверял его в этом случае, но чтобы быть уверенным :)
https: // www.sqlteam.com/articles/avoid-enclosing-indexed-columns-in-a-function-in-the-where-clause