У меня сложилось впечатление, что вы думаете, что это можно решить с помощью простой математической формулы.И, вероятно, это возможно, если ваша система надежна.
Каждые тридцать минут можно увидеть как 360 градусов или 2 пи радианы на графике гармонических функций.Это 12 градусов = 1 минута.Например, косинус:
f(x) = cos(x)
f(x) = cos(elapsedMinutes * 12 degrees)
Где истекшие минуты - это время с момента выхода первых 30-минутных обновлений.Это должно быть постоянное количество минут, добавляемых к значению last_update.
Поскольку у вас есть двухминутное окно с ошибкой, будет время передать 30-минутное обновление, если значение f (x)(выше) находится между значением, которое вы получите менее чем за одну минуту до или после запланированного обновления.Что было бы = cos (1 * 12 градусов) = 0,9781476007338056379285667478696.
Собрав все вместе, пришло время отправить тридцатиминутное обновление, если это выражение SQL истинно:
COS(RADIANS( 12 * DATEDIFF(minutes,
DATEADD(minutes, constantNumberOfMinutesBetweenSecondAndThirdUpdate, last_update),
CURRENT_TIMESTAMP))) > 0.9781476007338056379285667478696
Есливам нужно более широкое окно, чем ровно две минуты, просто немного уменьшите это число.