můžete to zkusit.
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
;
Neuvedli jste, jak chcete naložit s případem, kdy více řádků ve skupině LinkedID představuje nejblíže cílovému datu. Toto řešení bude obsahovat pouze jeden řádek A v tomto případě nemůžete zaručit, který řádek z více platných hodnot je zahrnut.
Pokud chcete zahrnout všechny řádky, které představují nejbližší hodnotu, můžete v dotazu změnit ROW_NUMBER() pomocí RANK().