これを試すことができます。
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 グループ内の複数の行がターゲットの日付に最も近い場合をどのように処理するかを示していません。このソリューションには 1 つの行のみが含まれます。この場合、複数の有効な値のどの行が含まれるかは保証できません。
最も近い値を表すすべての行を含めたい場合は、クエリで RANK() を使用して ROW_NUMBER() を変更できます。