你可以试试看
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 cteWHERe SEQUENCE = 1ORDER BY ID;
您没有说明如何处理linkedID组中的多行代表最接近目标日期的情况。此解决方案将仅包含一行,并且在这种情况下,您不能保证包含多个有效值的哪一行。
如果要包括代表最接近值的所有行,可以在查询中用RANK()更改ROW_NUMBER()。



