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

consulta y subconsulta

Estas en el tema de consulta y subconsulta en el foro de Mysql en Foros del Web. amigos tengo esta bronca y les agradezco el tiempo de leerla y mas aun si me ayudan a responder en esta vista select week(`tbl_1361_gas` . ...
  #1 (permalink)  
Antiguo 29/04/2011, 11:25
Avatar de dorde  
Fecha de Ingreso: diciembre-2003
Mensajes: 145
Antigüedad: 20 años, 4 meses
Puntos: 7
Pregunta consulta y subconsulta

amigos tengo esta bronca y les agradezco el tiempo de leerla y mas aun si me ayudan a responder

en esta vista

select week(`tbl_1361_gas` . `fechahora` , 0 )AS `semana` ,
cast(`tbl_1361_gas` . `fechahora` as date )AS `fechahora` ,
`tbl_1070_predios` . `nombre` AS `nombre_predio` ,
`tbl_1361_gas` . `gas_id` AS `gas_id` ,
`tbl_1361_gas` . `respuestas` AS `respuestas` ,
`tbl_1361_gas` . `id` AS `id`

from ((`tbl_1070_predios` join `tbl_1361_gas` )
join `tbl_1360_gas_puntos` )

where ((`tbl_1360_gas_puntos` . `id` =3 )
and (`tbl_1360_gas_puntos` . `id` =`tbl_1361_gas` . `gas_id`)
and (`tbl_1070_predios` . `id` =`tbl_1360_gas_puntos` . `predio_id` ))
ORDER BY `tbl_1361_gas`.`id` DESC

me da datos de la siguente manera:
semana, fechahora, nombre_predio, gas_id, respuestas, id,
17 25/04/2011 Invernadero 1 3 35 29
17 25/04/2011 Invernadero 1 4 31 28
16 23/04/2011 Invernadero 1 3 30 27
16 23/04/2011 Invernadero 1 4 32 26
16 20/04/2011 Invernadero 1 3 35 23
16 20/04/2011 Invernadero 1 4 32 22
16 19/04/2011 Invernadero 1 3 35 21


ahora: yo necesito la diferencia en el valor de repuesta entre la medicion mas actual y la inmediata anterior, en el mismo punto ( gas_id).
ejemplo:
el 23 de abril se midio invernadero 1, en el gas_id 3, y la repuesta es 35
el 25 de abril se midio invernadero 1, en el gas_id 3, y la repuesta es 35 la respuesta que nececito es 5 en una columna que diga diferencia vs anterior.

Neceito de su ayuda!!
__________________
Pero si alguno de vosotros se ve falto de sabiduría, que la pida a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. Pero que pida con fe, sin dudar

Santiago 1.5-6
  #2 (permalink)  
Antiguo 29/04/2011, 14:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #3 (permalink)  
Antiguo 29/04/2011, 15:44
Avatar de dorde  
Fecha de Ingreso: diciembre-2003
Mensajes: 145
Antigüedad: 20 años, 4 meses
Puntos: 7
Respuesta: consulta y subconsulta

tu idea me genero otra!!! gracias sin ti no se hubiera podido.

Esto es LO QUE PUSE :

SELECT T1.fechahora, T1.nombre_predio, gas_id, T1.respuestas - (
SELECT T2.respuestas
FROM 1_gas 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 1_gas T1
LIMIT 0 , 30
__________________
Pero si alguno de vosotros se ve falto de sabiduría, que la pida a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. Pero que pida con fe, sin dudar

Santiago 1.5-6

Etiquetas: subconsulta
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 12:36.