Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/07/2011, 15:09
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: devolver la diferencia de valor entre una fila siguente

Hola tokkaido:

No me gustaría simplemente darte la respuesta, así es que te ayudo con la parte que creo te puede traer más problemas y te toca completarla, de acuerdo?

Checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE TuTabla (kilometros INT, fecha DATE);
  2. Query OK, 0 rows affected (0.13 sec)
  3.  
  4. mysql> INSERT INTO TuTabla VALUES (1000, '2011-01-01'), (1200, '2011-01-03'),
  5.     -> (1250, '2011-01-11'),(1500, '2011-02-02'),(1800, '2011-02-15');
  6. Query OK, 5 rows affected (0.08 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from TuTabla;
  10. +------------+------------+
  11. | kilometros | fecha      |
  12. +------------+------------+
  13. |       1000 | 2011-01-01 |
  14. |       1200 | 2011-01-03 |
  15. |       1250 | 2011-01-11 |
  16. |       1500 | 2011-02-02 |
  17. |       1800 | 2011-02-15 |
  18. +------------+------------+
  19. 5 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT
  22.     -> kilometros ,
  23.     -> (SELECT MAX(kilometros) FROM TuTabla
  24.     -> WHERE fecha < T1.fecha) kilometros_a_restar
  25.     -> FROM TuTabla T1;
  26. +------------+---------------------+
  27. | kilometros | kilometros_a_restar |
  28. +------------+---------------------+
  29. |       1000 |                NULL |
  30. |       1200 |                1000 |
  31. |       1250 |                1200 |
  32. |       1500 |                1250 |
  33. |       1800 |                1500 |
  34. +------------+---------------------+
  35. 5 rows in set (0.00 sec)
  36.  
  37. mysql>


Como verás, si restas las dos columnas prácticamente tienes el resultado, es decir, para cada registro estoy buscando mediante una subconsulta el inmediato anterior (con la función MAX(fecha) y la condición WHERE). el único detalle que faltaría sería para el primer registro, ya que si haces la resta el resultado será un NULL

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> kilometros -
  3.     -> (SELECT MAX(kilometros) FROM TuTabla
  4.     -> WHERE fecha < T1.fecha) kilometros
  5.     -> FROM TuTabla T1;
  6. +---------------------+
  7. | kilometros          |
  8. +---------------------+
  9. |                NULL |
  10. |                 200 |
  11. |                  50 |
  12. |                 250 |
  13. |                 300 |
  14. +---------------------+
  15. 5 rows in set (0.00 sec)

Te tocaría validar que cuando el resultado de la subconsulta sea un null lo reemplace con 0. Espero que con eso no tendrás problemas.

Saludos
Leo.