Вы не можете сделать это в триггере, потому что триггер не может воздействовать на таблицу, по которой он был запущен.
Типичным решением будет создание хранимой процедуры для этой цели, которая будет запускать обновлениеи вставка последовательно (предпочтительно в той же транзакции). Из вашего приложения вы бы вызывали хранимую процедуру вместо выполнения запроса на вставку.
Но я думаю, что было бы проще вычислить информацию на лету при запросе таблицы. Если вы используете MySQL 8.0, вы можете использовать оконные функции:
select
topic,
payload,
datecreated,
lead(datecreated) over(order by datecreated) dateended
from mytable
В более ранних версиях вы можете использовать коррелированный подзапрос:
select
t.topic,
t.payload,
t.datecreated,
(select min(datecreated) from mytable t1 where t1.datecreated > t.datecreated) dateended
from mytable t