id int unsigned,
createdAt timestamp,
startedAt timestamp,
finishedAt timestamp,
interval int unsigned -- Я не очень понимаю, что у вас такое интервал, храните лучше в секундах.
По крону каждую минуту (можно и 10 мин, это не особо важно) вытягиваете записи, у которых startedAt >= CURRENT_TIMESTAMP() и finishedAt < CURRENT_TIMESTAMP(). Интервал и вот это вот все уже на части пыхи обрабатываете. Не забудьте комплексный ключ для startedAt+finishedAt добавить.
При выборке обязательно добавляйте погрешность, хотя бы секунд 5-10, либо вместо CURRENT_TIMESTAMP подставляйте округленное время, например для времени 10:20:01 используйте 10:20:00