Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/04/2011, 14:34
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: consulta y subconsulta

Hola dorbe:

A ver si entendí bien qué es lo que necesitas:

Código SQL:
Ver original
  1. mysql> CREATE TABLE ejemplo (semana INT, fechahora datetime, nombre_predio varch
  2. ar(20),
  3.     -> gas_id INT, respuestas INT, id INT(11));
  4. Query OK, 0 ROWS affected (0.06 sec)
  5.  
  6. mysql> INSERT  INTO ejemplo(semana,fechahora,nombre_predio,gas_id,respuestas,id)
  7.  VALUES
  8.     -> (17,'2011-04-25 12:00:00','Invernadero 1',3,35,29),
  9.     -> (17,'2011-04-24 11:00:00','Invernadero 1',4,31,28),
  10.     -> (16,'2011-04-23 09:45:12','Invernadero 1',3,30,27),
  11.     -> (16,'2011-04-23 08:01:09','Invernadero 1',4,32,26),
  12.     -> (16,'2011-04-20 17:54:21','Invernadero 1',3,35,23),
  13.     -> (16,'2011-04-20 09:12:59','Invernadero 1',4,32,22),
  14.     -> (16,'2011-04-19 11:00:00','Invernadero 1',3,35,21);
  15. Query OK, 7 ROWS affected (0.09 sec)
  16. Records: 7  Duplicates: 0  Warnings: 0
  17.  
  18. mysql> SELECT * FROM ejemplo;
  19. +--------+---------------------+---------------+--------+------------+------+
  20. | semana | fechahora           | nombre_predio | gas_id | respuestas | id   |
  21. +--------+---------------------+---------------+--------+------------+------+
  22. |     17 | 2011-04-25 12:00:00 | Invernadero 1 |      3 |         35 |   29 |
  23. |     17 | 2011-04-24 11:00:00 | Invernadero 1 |      4 |         31 |   28 |
  24. |     16 | 2011-04-23 09:45:12 | Invernadero 1 |      3 |         30 |   27 |
  25. |     16 | 2011-04-23 08:01:09 | Invernadero 1 |      4 |         32 |   26 |
  26. |     16 | 2011-04-20 17:54:21 | Invernadero 1 |      3 |         35 |   23 |
  27. |     16 | 2011-04-20 09:12:59 | Invernadero 1 |      4 |         32 |   22 |
  28. |     16 | 2011-04-19 11:00:00 | Invernadero 1 |      3 |         35 |   21 |
  29. +--------+---------------------+---------------+--------+------------+------+
  30. 7 ROWS IN SET (0.00 sec)
  31.  
  32. mysql> SELECT T1.fechahora, t1.nombre_predio, gas_id, T1.respuestas -
  33.     -> (
  34.     -> SELECT T2.respuestas
  35.     -> FROM ejemplo T2
  36.     -> WHERE T1.nombre_predio = T2.nombre_predio AND
  37.     -> T1.gas_id = T2.gas_id AND T1.fechahora > T2.fechahora
  38.     -> HAVING MAX(fechahora)
  39.     -> ) diferencia_vs_anterior
  40.     -> FROM ejemplo T1;
  41. +---------------------+---------------+--------+------------------------+
  42. | fechahora           | nombre_predio | gas_id | diferencia_vs_anterior |
  43. +---------------------+---------------+--------+------------------------+
  44. | 2011-04-25 12:00:00 | Invernadero 1 |      3 |                      5 |
  45. | 2011-04-24 11:00:00 | Invernadero 1 |      4 |                     -1 |
  46. | 2011-04-23 09:45:12 | Invernadero 1 |      3 |                     -5 |
  47. | 2011-04-23 08:01:09 | Invernadero 1 |      4 |                      0 |
  48. | 2011-04-20 17:54:21 | Invernadero 1 |      3 |                      0 |
  49. | 2011-04-20 09:12:59 | Invernadero 1 |      4 |                   NULL |
  50. | 2011-04-19 11:00:00 | Invernadero 1 |      3 |                   NULL |
  51. +---------------------+---------------+--------+------------------------+
  52. 7 ROWS IN SET (0.00 sec)

Aquí cabe mencionar que para estoy considerando que el campo fechahora trae justamente fecha y hora (en tus datos de ejemplo sólo muestras la fecha). En el caso de los dos últimos registros que aparecen como NULL, es porque no existe ningún registro con fecha posterior a la del propio registro.

Sale un vistazo a ver si es más o menos lo que necesitas.

Saludos
Leo.