Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

diferencia de tiempo entre una fila y la anterior

Estas en el tema de diferencia de tiempo entre una fila y la anterior en el foro de Mysql en Foros del Web. Hola, hace días que me peleo con una consulta y pese ha haber encontrado muchos ejemplos no acabo de adaptarlos a mi código. la consulta ...
  #1 (permalink)  
Antiguo 26/01/2014, 03:07
 
Fecha de Ingreso: agosto-2012
Mensajes: 4
Antigüedad: 11 años, 8 meses
Puntos: 0
diferencia de tiempo entre una fila y la anterior

Hola,

hace días que me peleo con una consulta y pese ha haber encontrado muchos ejemplos no acabo de adaptarlos a mi código.

la consulta es esta
Código SQL:
Ver original
  1. SELECT
  2.         id,
  3.         date_format(DATA, '%d/%m/%Y %H:%i') AS data1,
  4.         temperatura,
  5.         TIMEDIFF((SELECT DATA FROM bancal1 WHERE id = '1277'),(SELECT DATA FROM bancal1 WHERE id = 1276)) AS dife
  6.         FROM bancal1 WHERE DATA > CURDATE() ORDER BY DATA DESC
quisiera cambiar los valores fijos 1277 y 1276 por id y id-1 para que cada linea me de la diferencia de tiempo con la anterior.

la descripción de la tabla
Código MySQL:
Ver original
  1. mysql> desc bancal1;
  2. +-------------+--------------+------+-----+-------------------+----------------+
  3. | Field       | Type         | Null | Key | Default           | Extra          |
  4. +-------------+--------------+------+-----+-------------------+----------------+
  5. | id          | int(11)      | NO   | PRI | NULL              | auto_increment |
  6. | data        | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
  7. | temperatura | decimal(5,3) | YES  |     | NULL              |                |
  8. +-------------+--------------+------+-----+-------------------+----------------+


y la tabla
Código MySQL:
Ver original
  1. +----+---------------------+-------------+
  2. | id | data                | temperatura |
  3. +----+---------------------+-------------+
  4. |  1 | 2014-01-17 12:08:21 |      22.400 |
  5. |  2 | 2014-01-17 16:39:32 |      15.100 |
  6. |  3 | 2014-01-17 16:42:34 |      15.300 |
  7. |  4 | 2014-01-17 16:45:36 |      15.000 |
  8. |  5 | 2014-01-17 16:51:39 |      14.600 |
  9. |  6 | 2014-01-17 16:54:41 |      14.200 |

Cita:
Editado:Código de programación no permitido den foroes de BBDD. Leer las normas del foro por favor.

Última edición por gnzsoloyo; 27/01/2014 a las 07:31
  #2 (permalink)  
Antiguo 26/01/2014, 14:51
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: diferencia de tiempo entre una fila y la anterior

Cita:
Iniciado por saba01 Ver Mensaje
quisiera cambiar los valores fijos 1277 y 1276 por id y id-1 para que cada linea me de la diferencia de tiempo con la anterior.
No entiendo bien que quieres decir!

Podrías explicar...

Saludos!
  #3 (permalink)  
Antiguo 27/01/2014, 11:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: diferencia de tiempo entre una fila y la anterior

Hola Saba01:

al igual que Djoaq, tengo algunos problemas para entender qué es lo que estás tratando de obtener... creo que deberías de haber comenzado por decirnos qué es lo que esperas como resultado, de esta manera podríamos proponerte una solución distinta a lo que tienes...

Según lo que creo, lo que pretendes hacer es comparar cada registro con su registro anterior (es decir, el 2 contra el 1, el 3 contra el 2, el 4 contra el 3 y así sucesivamente)... en el caso del id = 1, este no lo podrías comparar contra ninguno, pues es el primero de la lista. Si estoy en lo correcto, esto lo puedes hacer de muchas maneras, una de las más simples sería con un LEFT JOIN, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM bancal1;
  2. +------+---------------------+-------------+
  3. | id   | fecha               | temperatura |
  4. +------+---------------------+-------------+
  5. |    1 | 2014-01-17 12:08:21 |      22.400 |
  6. |    2 | 2014-01-17 16:39:32 |      15.100 |
  7. |    3 | 2014-01-17 16:42:34 |      15.300 |
  8. |    4 | 2014-01-17 16:45:36 |      15.000 |
  9. |    5 | 2014-01-17 16:51:39 |      14.600 |
  10. |    6 | 2014-01-17 16:54:41 |      14.200 |
  11. +------+---------------------+-------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM bancal1 T1
  15.     -> LEFT JOIN bancal1 T2 ON T1.id - 1 = T2.id
  16.     -> ORDER BY T1.id;
  17. +------+---------------------+-------------+------+---------------------+-------------+
  18. | id   | fecha               | temperatura | id   | fecha               | temperatura |
  19. +------+---------------------+-------------+------+---------------------+-------------+
  20. |    1 | 2014-01-17 12:08:21 |      22.400 | NULL | NULL                |        NULL |
  21. |    2 | 2014-01-17 16:39:32 |      15.100 |    1 | 2014-01-17 12:08:21 |      22.400 |
  22. |    3 | 2014-01-17 16:42:34 |      15.300 |    2 | 2014-01-17 16:39:32 |      15.100 |
  23. |    4 | 2014-01-17 16:45:36 |      15.000 |    3 | 2014-01-17 16:42:34 |      15.300 |
  24. |    5 | 2014-01-17 16:51:39 |      14.600 |    4 | 2014-01-17 16:45:36 |      15.000 |
  25. |    6 | 2014-01-17 16:54:41 |      14.200 |    5 | 2014-01-17 16:51:39 |      14.600 |
  26. +------+---------------------+-------------+------+---------------------+-------------+
  27. 6 rows in set (0.00 sec)

Una vez con esto tú puedes hacer los cálculos que deseas (según lo que pones en tu consulta, creo que lo que quieres obtener es el tiempo transcurrido desde la última medición), si esto es correcto entonces simplemente harías lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT T1.*, TIMEDIFF(T1.fecha, t2.fecha) diferencia
  2.     -> FROM bancal1 T1
  3.     -> LEFT JOIN bancal1 T2 ON T1.id - 1 = T2.id
  4.     -> ORDER BY T1.id;
  5. +------+---------------------+-------------+------------+
  6. | id   | fecha               | temperatura | diferencia |
  7. +------+---------------------+-------------+------------+
  8. |    1 | 2014-01-17 12:08:21 |      22.400 | NULL       |
  9. |    2 | 2014-01-17 16:39:32 |      15.100 | 04:31:11   |
  10. |    3 | 2014-01-17 16:42:34 |      15.300 | 00:03:02   |
  11. |    4 | 2014-01-17 16:45:36 |      15.000 | 00:03:02   |
  12. |    5 | 2014-01-17 16:51:39 |      14.600 | 00:06:03   |
  13. |    6 | 2014-01-17 16:54:41 |      14.200 | 00:03:02   |
  14. +------+---------------------+-------------+------------+
  15. 6 rows in set (0.00 sec)

Dale un vistazo para ver si es lo que necesitas.

Saludos
Leo
  #4 (permalink)  
Antiguo 27/01/2014, 12:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: diferencia de tiempo entre una fila y la anterior

Solo veo un problema, que los identificadores no permitan esa consulta para todos los registros. Basta con que se haya borrado algún registro y falte un número en la secuencia. Eso producirá datos erróneos. Y si fuera el caso, habría que ver el modo de añadir numeraciones a todos los registros mediante variables y hacerlo dos veces sobre la misma tabla, una empezando una numeración desde cero y otra desde uno. Luego haríamos el mismo tiempo de LEFT JOIN ... ON... que nos ha propuesto Leonardo.

saludos

Etiquetas: diferencia, fila, null, registro, select, sql, tabla, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.