Да, это правильный подход.Я бы сделал это так же, возможно, без звездочки и без точки с запятой в начале (поскольку я также не использую точку с запятой, чтобы начать предложение):
WITH
cte (id, [date], [value], RN) AS (
SELECT id, [date], [value],
ROW_NUMBER() OVER (PARTITION BY id ORDER BY [date])
FROM Bla
WHERE [value] IS NOT NULL
)
SELECT id, [date], [value]
FROM cte
WHERE RN = 1;