Assuming SQL 2012 or higher, this technique from Dwain Camps might help:
WITH cteCount As
(
SELECT
CustomerID,
FirstName,
CreateDate,
COUNT(CreateDate) OVER (ORDER BY CustomerID) As C
FROM
dbo.Customer
),
cteRN As
(
SELECT
CustomerID,
FirstName,
CreateDate,
ROW_NUMBER() OVER (PARTITION BY C ORDER BY CustomerID) - 1 As RN
FROM
cteCount
)
SELECT
CustomerID,
FirstName,
CreateDate,
CASE
WHEN CreateDate Is Not Null THEN CreateDate
ELSE LAG(CreateDate, RN) OVER (ORDER BY CustomerID, CreateDate)
END As CreateDate
FROM
cteRN
ORDER BY
CustomerID
;
Filling In Missing Values Using the T-SQL Window Frame - Simple Talk[
^]