Для этого можно использовать подзапрос с предложением CASE WHEN
:
SELECT UserId, StartOfWeekDate, Score ,
CASE WHEN Score IS NOT NULL THEN Score ELSE
(SELECT TOP 1 Score FROM ScoresByUserOverWeek T2 WHERE T1.UserID = T2.UserID AND T1.StartOfWeekDate > T2.StartOfWeekDate AND T2.Score IS NOT NULL ORDER BY T2.StartOfWeekDate DESC)
END AS LastValue
FROM ScoresByUserOverWeek T1
Эксперименты
--Create Table and Insert Values
CREATE TABLE #TEMP (UserId INT, StartOfWeekDate DATETIME, Score INT)
INSERT INTO #TEMP (UserId , StartOfWeekDate , Score )
VALUES( 12534 , '20181217' , NULL ),
( 12534, '20181224' , NULL ),
( 12534, '20181231' , 320 ),
( 12534, '20190107' , NULL ),
( 12534, '20190114' , NULL ),
( 12534, '20190121' , NULL ),
( 12534, '20190128' , 345 ),
( 12534, '20190204' , NULL ),
( 12534, '20190211' , NULL )
--Execute Query
SELECT UserId, StartOfWeekDate, Score ,
CASE WHEN Score IS NOT NULL THEN Score ELSE
(SELECT TOP 1 Score FROM #TEMP T2 WHERE T1.UserID = T2.UserID AND T1.StartOfWeekDate > T2.StartOfWeekDate AND T2.Score IS NOT NULL ORDER BY T2.StartOfWeekDate DESC)
END AS LastValue
FROM #TEMP T1
Результат
![enter image description here](https://i.stack.imgur.com/DNile.png)