Hola dorbe:
A ver si entendí bien qué es lo que necesitas:
Código SQL:
Ver originalmysql> CREATE TABLE ejemplo (semana INT, fechahora datetime, nombre_predio varch
ar(20),
-> gas_id INT, respuestas INT, id INT(11));
Query OK, 0 ROWS affected (0.06 sec)
mysql> INSERT INTO ejemplo(semana,fechahora,nombre_predio,gas_id,respuestas,id)
VALUES
-> (17,'2011-04-25 12:00:00','Invernadero 1',3,35,29),
-> (17,'2011-04-24 11:00:00','Invernadero 1',4,31,28),
-> (16,'2011-04-23 09:45:12','Invernadero 1',3,30,27),
-> (16,'2011-04-23 08:01:09','Invernadero 1',4,32,26),
-> (16,'2011-04-20 17:54:21','Invernadero 1',3,35,23),
-> (16,'2011-04-20 09:12:59','Invernadero 1',4,32,22),
-> (16,'2011-04-19 11:00:00','Invernadero 1',3,35,21);
Query OK, 7 ROWS affected (0.09 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM ejemplo;
+--------+---------------------+---------------+--------+------------+------+
| semana | fechahora | nombre_predio | gas_id | respuestas | id |
+--------+---------------------+---------------+--------+------------+------+
| 17 | 2011-04-25 12:00:00 | Invernadero 1 | 3 | 35 | 29 |
| 17 | 2011-04-24 11:00:00 | Invernadero 1 | 4 | 31 | 28 |
| 16 | 2011-04-23 09:45:12 | Invernadero 1 | 3 | 30 | 27 |
| 16 | 2011-04-23 08:01:09 | Invernadero 1 | 4 | 32 | 26 |
| 16 | 2011-04-20 17:54:21 | Invernadero 1 | 3 | 35 | 23 |
| 16 | 2011-04-20 09:12:59 | Invernadero 1 | 4 | 32 | 22 |
| 16 | 2011-04-19 11:00:00 | Invernadero 1 | 3 | 35 | 21 |
+--------+---------------------+---------------+--------+------------+------+
7 ROWS IN SET (0.00 sec)
mysql> SELECT T1.fechahora, t1.nombre_predio, gas_id, T1.respuestas -
-> (
-> SELECT T2.respuestas
-> FROM ejemplo T2
-> WHERE T1.nombre_predio = T2.nombre_predio AND
-> T1.gas_id = T2.gas_id AND T1.fechahora > T2.fechahora
-> HAVING MAX(fechahora)
-> ) diferencia_vs_anterior
-> FROM ejemplo T1;
+---------------------+---------------+--------+------------------------+
| fechahora | nombre_predio | gas_id | diferencia_vs_anterior |
+---------------------+---------------+--------+------------------------+
| 2011-04-25 12:00:00 | Invernadero 1 | 3 | 5 |
| 2011-04-24 11:00:00 | Invernadero 1 | 4 | -1 |
| 2011-04-23 09:45:12 | Invernadero 1 | 3 | -5 |
| 2011-04-23 08:01:09 | Invernadero 1 | 4 | 0 |
| 2011-04-20 17:54:21 | Invernadero 1 | 3 | 0 |
| 2011-04-20 09:12:59 | Invernadero 1 | 4 | NULL |
| 2011-04-19 11:00:00 | Invernadero 1 | 3 | NULL |
+---------------------+---------------+--------+------------------------+
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.