можете да опитате това.
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
;
Не сте посочили как искате да се справите със случая, при който множество редове в група LinkedID представляват най-близката до целевата дата. Това решение ще включва само един ред и в този случай не можете да гарантирате кой ред от множеството валидни стойности е включен.
Можете да промените ROW_NUMBER() с RANK() в заявката, ако искате да включите всички редове, които представляват най-близката стойност.