sql >> Base de Datos >  >> RDS >> Sqlserver

T-SQL:SELECCIONE por fecha más cercana y AGRUPADO POR ID

puedes probar esto.

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
;

No indicó cómo desea manejar el caso en el que varias filas en un grupo de LinkedID representan el más cercano a la fecha objetivo. Esta solución solo incluirá una fila y, en este caso, no puede garantizar qué fila de los múltiples valores válidos se incluye.

Puede cambiar ROW_NUMBER() con RANK() en la consulta si desea incluir todas las filas que representan el valor más cercano.