Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/07/2011, 18:29
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Operacion con campo anterior de una columna

Bueno, en realidad mi propuesta fue hecha un poco a las apuradas y mirando de costado, pero la idea sería mas o menos así, en realidad:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS VALES;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> CREATE TABLE IF NOT EXISTS VALES
  5.     ->     (KM DECIMAL(12,3),
  6.     ->     LITROS DECIMAL(8,3));
  7. Query OK, 0 rows affected (0.01 sec)
  8.  
  9. mysql> INSERT INTO VALES(KM, LITROS)
  10.     -> VALUES
  11.     ->     (261253.000,43.668),
  12.     ->     (261504.000,33.349),
  13.     ->     (261911.000,43.668),
  14.     ->     (262245.000,35.388),
  15.     ->     (262522.000,37.575);
  16. Query OK, 5 rows affected (0.00 sec)
  17. Records: 5  Duplicates: 0  Warnings: 0
  18.  
  19. mysql>
  20. mysql> SELECT
  21.     ->     IF(KM IS NULL, 'Total:', KM) KM,
  22.     ->     IF(KM IS NULL, '', LITROS) LITROS,
  23.     ->     TRUNCATE(SUM(LITROS),3) LITROS_acum,
  24.     ->     TRUNCATE(SUM(RECORRIDO),3) R_ACUMULADO
  25.     -> FROM
  26.     ->     (SELECT KM, LITROS, IF(@kml=0, @kml:=KM, @kml)km1, (KM-@kml) RECORRIDO, @kml:= KM
  27.     ->     FROM VALES JOIN (SELECT @kml:=0) T1) T2
  28.     -> GROUP BY KM WITH ROLLUP;
  29. +------------+--------+-------------+-------------+
  30. | KM         | LITROS | LITROS_acum | R_ACUMULADO |
  31. +------------+--------+-------------+-------------+
  32. | 261253.000 | 33.349 |      43.668 |       0.000 |
  33. | 261504.000 | 43.668 |      33.349 |     251.000 |
  34. | 261911.000 | 35.388 |      43.668 |     407.000 |
  35. | 262245.000 | 37.575 |      35.388 |     334.000 |
  36. | 262522.000 | 37.575 |      37.575 |     277.000 |
  37. | Total:     |        |     193.648 |    1269.000 |
  38. +------------+--------+-------------+-------------+
  39. 6 rows in set, 1 warning (0.00 sec)
Este es un ejemplo de la flexibilidad que permiten las variables de usuario.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)