du kan prova detta.
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
;
Du angav inte hur du vill hantera fallet där flera rader i en LinkedID-grupp representerar det närmaste måldatumet. Den här lösningen kommer bara att inkludera en rad. Och i det här fallet kan du inte garantera vilken rad med flera giltiga värden som ingår.
Du kan ändra ROW_NUMBER() med RANK() i frågan om du vill inkludera alla rader som representerar det närmaste värdet.