Вы можете использовать коррелированный подзапрос для заполнения столбца последней активной даты:
SELECT
CampaignID,
Date,
Status,
CASE WHEN Status <> 'Active' THEN
(SELECT t2.Date FROM yourTable t2
WHERE t2.CampaignID = t1.CampaignID AND t2.Date > t1.Date AND t2.Status = 'Active'
ORDER BY t2.Date LIMIT 1) END AS Active_Date
FROM yourTable t1
ORDER BY
CampaignID,
Date DESC;
Demo
Basi c logi c, использованный выше, прост. Для каждой записи, имеющей статус не активен, коррелированный подзапрос просматривает и пытается найти дату ближайшей записи, статус которой равен активен. Мы также выполняем этот поиск только для записей, принадлежащих к одной и той же кампании.