Quantcast
Channel: Sustraer valor columna de la misma columna, registro anterior - Stack Overflow en español
Viewing all articles
Browse latest Browse all 3

Respuesta de Patricio Moracho en Sustraer valor columna de la misma columna, registro anterior

$
0
0

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

Viewing all articles
Browse latest Browse all 3

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>