je kunt dit proberen.
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
;
U heeft niet aangegeven hoe u wilt omgaan met het geval waarbij meerdere rijen in een LinkedID-groep het dichtst bij de streefdatum staan. Deze oplossing zal slechts één rij bevatten. In dit geval kunt u niet garanderen welke rij van de meerdere geldige waarden is opgenomen.
U kunt ROW_NUMBER() wijzigen met RANK() in de query als u alle rijen wilt opnemen die de dichtstbijzijnde waarde vertegenwoordigen.