Calcular resultado con registro anterior y actualizar en el nuevo registro

publicado por: Anonymous

Quiero hacer un recorrido por la tabla ‘data’ y en cada uno de los registros necesito tomar el Mileage del registro anterior, luego restar Nuevo Mileage – Viejo Mileage y dividirlo entre Liters para sacar Efficiency y asignarselo al registro , pero no se mucho de base de datos, como podría leer cada registro y actualizar?

de antemano muchas gracias! les dejo captura.introducir la descripción de la imagen aquí

solución

Intenta esto:

Para recorrer la tabla data y obtener el Mileage viejo y restarlo con el nuevo y tambien con la división de dicha resta:

SELECT mileage,
       mileage_previo,
       (mileage - mileage_previo) as resta,
       (mileage - mileage_previo) / liters  as efficiency 
FROM(
    SELECT mileage,
           CASE
            WHEN (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) IS NULL THEN 0
            ELSE (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) 
           END mileage_previo,
           liters 
    FROM data d
) t

Ahora para insertar en la tabla data en base a este query solo tienes que hacer:

 INSERT INTO data (mileage, liters , ..., coln)
 SELECT mileage,
           mileage_previo,
           (mileage - mileage_previo) as resta,
           (mileage - mileage_previo) / liters  as efficiency 
    FROM(
        SELECT mileage,
               CASE
                WHEN (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) IS NULL THEN 0
                ELSE (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) 
               END mileage_previo,
               liters 
        FROM data d
    ) t

ó actualizar que creo que es lo que tu quieres:

UPDATE data
SET efficiency = (SELECT 
                   (mileage - mileage_previo) / liters  as efficiency 
                  FROM(
                     SELECT mileage,
                            CASE
                              WHEN (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) IS NULL THEN 0
                              ELSE (SELECT d2.id FROM data d2 WHERE d2.id < d.id LIMIT 1) 
                              END mileage_previo,
                           liters 
                     FROM data d
                    ) t
                  )
WHERE id IN (SELECT id FROM data)
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *