Следующий запрос должен делать то, что вы хотите:
CREATE TABLE #temp (cmg INT, effdate DATE)
INSERT INTO #temp VALUES
(1,'2018-10-23'),
(1,'2018-10-01'),
(1,'2018-01-01'),
(3,'2019-03-01'),
(3,'2018-12-01')
SELECT cmg, effdate, LAG(DATEADD(DAY,-1,effdate),1, GETDATE()) OVER (PARTITION BY cmg ORDER BY effdate DESC) as enddate
FROM #temp
ORDER BY cmg, effdate DESC
Результат, как показано ниже,
cmg effdate enddate
1 2018-10-23 2019-06-11
1 2018-10-01 2018-10-22
1 2018-01-01 2018-09-30
3 2019-03-01 2019-06-11
3 2018-12-01 2019-02-28