Esta puede ser una solución, sin duda hay más sencillas pero ahora no se me ocurren. La idea es trabajar con dos subconsultas dónde generamos un número de orden por cada placa a partir de ROW_NUMBER()
y luego simplemente hacemos JOIN
entre una fila y la siguiente.
SELECT K1.Placa_FK, K1.Kilometraje, K1.Kilometrajes_PK, K1.Placa_FK, K1.Carga_Combustible_FK, K1.Fecha, K1.Turno, K1.Kilometraje, Fecha_Captura, Usuario_Entrada, CASE WHEN K2.Kilometraje IS NULL THEN NULL ELSE K1.Kilometraje - isnull(K2.Kilometraje,0) END as Recorrido FROM (SELECT Placa_FK, Kilometraje, Kilometrajes_PK, Placa_FK, Carga_Combustible_FK, Fecha, Turno, Kilometraje, Fecha_Captura, Usuario_Entrada ROW_NUMBER() OVER (PARTITION BY Placa_FK ORDER BY Kilometraje ASC) as Nro FROM Control_Kilometrajes K1 ) K1 LEFT JOIN (SELECT Placa_FK, Kilometraje, ROW_NUMBER() OVER (PARTITION BY Placa_FK ORDER BY Kilometraje ASC) as Nro FROM Control_Kilometrajes ) K2 ON K1.Placa_FK = K2.Placa_FK and K1.Nro = K2.Nro + 1 ORDER BY K1.Placa_FK, K1.Kilometraje ASC
Editado: Esta otra forma creo que es mejor y algo más sencilla:
SELECT K1.Placa_FK, K1.Kilometraje, K1.Kilometrajes_PK, K1.Placa_FK, K1.Carga_Combustible_FK, K1.Fecha, K1.Turno, K1.Kilometraje, K1.Fecha_Captura, K1.Usuario_Entrada, K1.Kilometraje - MAX(K2.Kilometraje) AS Recorrido FROM Control_Kilometrajes K1 LEFT JOIN Control_Kilometrajes K2 ON K1.Placa_FK = K2.Placa_FK AND K2.Kilometraje < K1.Kilometraje GROUP BY K1.Placa_FK, K1.Kilometraje K1.Kilometrajes_PK, K1.Placa_FK, K1.Carga_Combustible_FK, K1.Fecha, K1.Turno, K1.Kilometraje, K1.Fecha_Captura, K1.Usuario_Entrada ORDER BY K1.Placa_FK, K1.Kilometraje ASC