du kan prøve dette.
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 har ikke angivet, hvordan du vil håndtere det tilfælde, hvor flere rækker i en LinkedID-gruppe repræsenterer den tætteste på måldatoen. Denne løsning vil kun inkludere én række. Og i dette tilfælde kan du ikke garantere, hvilken række af de flere gyldige værdier der er inkluderet.
Du kan ændre ROW_NUMBER() med RANK() i forespørgslen, hvis du vil inkludere alle rækker, der repræsenterer den nærmeste værdi.