Предполагаю, что в БД должны быть следующие поля: дата подписки и интервал оповещений (1 день, 7 дней, 30 дней и тд)
Запускать скрипт по крону раз в сутки и выбирать только тех юзеров, у которых разница в днях между датой подписки и настоящей датой кратна интервалу подписки:
DATEDIFF(DAY, '2020-03-11T15:12:13', GETDATE()) / 7 = 1