możesz tego spróbować.
DECLARE @Date DATE = '10/01/2010';
WITH cte AS
(
SELECT ID, LinkedID, ABS(DATEDIFF(DD, @date, DATE)) diff,
ROW_NUMBER() OVER (PARTITION BY LinkedID ORDER BY ABS(DATEDIFF(DD, @date, DATE))) AS SEQUENCE
FROM MyTable
)
SELECT *
FROM cte
WHERE SEQUENCE = 1
ORDER BY ID
;
Nie wskazałeś, jak chcesz postępować w przypadku, gdy wiele wierszy w grupie LinkedID reprezentuje datę najbliższą docelowej. To rozwiązanie będzie zawierać tylko jeden wiersz. W tym przypadku nie można zagwarantować, który wiersz z wielu prawidłowych wartości jest uwzględniony.
Możesz zmienić ROW_NUMBER() na RANK() w zapytaniu, jeśli chcesz uwzględnić wszystkie wiersze reprezentujące najbliższą wartość.