Try this:
DECLARE @Table TABLE (
[Year] int,
[Month] varchar(20),
[Date] int,
[Value] int
);
INSERT INTO @Table VALUES
(2017, 'March', 8, 15), (2018, 'March', 8, 25),
(2019, 'March', 8, 15), (2020, 'March', 8, 25),
(2021, 'March', 8, 15),
(2017, 'March', 9, 20), (2018, 'March', 9, 30),
(2019, 'March', 9, 20), (2020, 'March', 9, 30),
(2021, 'March', 9, 20), (2022, 'March', 9, 30);
;WITH CTE AS (
SELECT t2.[Year] AS StartYear,
t1.[Year] AS EndYear,
t1.[Month],
t1.[Date]
FROM @Table AS t1
INNER JOIN @Table AS t2 ON t1.[Year] = t2.[Year] + 4 AND t1.[Month] = t2.[Month] AND t1.[Date] = t2.[Date]
)
SELECT c.[EndYear], t.[Date], AVG(t.[Value]) AS AvgValue
FROM @Table AS t
LEFT JOIN CTE AS c ON t.[Month] = c.[Month] AND t.[Date] = c.[Date]
WHERE EXISTS (
SELECT 1 FROM CTE WHERE StartYear <= t.[Year] AND EndYear >= t.[Year] AND [Month] = t.[Month] AND [Date] = t.[Date]
)
GROUP BY c.[EndYear], t.[Month], t.[Date];
GO