• Publicidad

Ayuda con la construcción de un Query

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Ayuda con la construcción de un Query

Notapor MARKO » 2013-01-14 18:30 @812

Saludos, Perl en español. Por adelantado agradezco su ayuda.

Cuento con una base de datos de Microsoft SQL Server 2005 y necesito crear una query de la siguiente manera:

Cuento con dos tablas:
  • poe
  • ldm

La tabla poe cuenta con los siguientes campos: idgen, fecha, hora, poe y valoracion.
Por cada fecha, el idgen con una hora, un poe y una valorización pueden aparecer desde 0 hasta 24 veces, o sea 24 registros.

La tabla ldm cuenta con los siguientes campos: idldm (este es correlativo), fecha, idgen, costovarmin, costovarmed y costovarmax.
Por cada fecha el idgen y los costos solo aparecen una vez.

Lo que yo necesito hacer es una consulta de un año completo '2012-01-01' hasta '2012-12-31' en donde el resultado aparezca algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. idgen   fecha  hora  poe  valoracion  costovarmin  costovarmed  costovarmax
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La verdad es que el problema no es muy complejo, ya que las dos tablas se conectan por la fecha y más relevantemente por el idgen, así que la query no es tan difícil.

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. USE gencos;
  2. Declare @idgen varchar(6);
  3. SET @idgen = '2';
  4. Declare @fechainicio varchar(10);
  5. SET @fechainicio = '2012-01-01';
  6. Declare @fechafin varchar(10);
  7. SET @fechafin = '2012-12-31';
  8.  
  9. SELECT poe.idgen, poe.fecha, poe.hora, poe.poe, poe.valoracion, ldm.costovarmin, ldm.costovarmed, ldm.costovarmax
  10. FROM poe,ldm
  11. WHERE poe.fecha BETWEEN @fechainicio AND @fechafin AND poe.fecha = ldm.fecha AND poe.idgen = @idgen AND
  12. poe.idgen = ldm.idgen ORDER BY fecha, hora;
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La dificultad es que para una fecha específica los costos variables que yo necesito no son los del idgen en cuestión sino los costos del registro anterior al idgen mencionado en ldm (aquí se ve la gran importancia que tiene el campo idldm ya que es el correlativo por lo cual lo utilizo para buscar el anterior en la tabla ldm.

A continuación coloco los dos queries que uso para sacar los datos pero no he podido conectarlos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. /* este query funciona bien*/
  2.  
  3. USE gencos
  4. Declare @idgen varchar(6);
  5. SET @idgen = '2';
  6. Declare @fechainicio varchar(10);
  7. SET @fechainicio = '2012-01-01';
  8. Declare @fechafin varchar(10);
  9. SET @fechafin = '2012-12-31';
  10.  
  11. SELECT fecha, hora, poe, valoracion
  12. FROM poe
  13. WHERE fecha BETWEEN @fechainicio AND @fechafin AND idgen = @idgen ORDER BY fecha, hora;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El query anterior funciona sin complicaciones, pero ahora
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. SELECT TOP(1) costovarmin, costovarmed, costovarmax
  2. FROM ldm
  3. WHERE idldm < (SELECT idldm FROM ldm WHERE idgen= @idgen AND fecha = '2012-01-01') ORDER BY IDLDM DESC;
  4.  
  5. /*este query me da los 3 valores de costos para el idgen anterior en la fecha en cuestión pero:
  6. 1) solo sirve para un día y yo lo necesito para un rango de días
  7. 2) no tengo idea de cómo conectar los resultados de este query con los resultados del primer query*/
  8.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Ideas?

Gracias.
Última edición por explorer el 2013-01-15 11:05 @503, editado 1 vez en total
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Publicidad

Re: Ayuda con la construcción de un Query

Notapor reLlene » 2013-03-26 21:55 @955

A ver si te entiendo... lo que buscas es mostrar la tabla ldm por COMPLETA (porque imagino tiene un registro por fecha) y ADEMÁS tomar de la tabla poe la valoración, poe y hora en que fue encontrada, ¿no?

¿no te vale lo siguiente?

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. SELECT ldm.idgen, poe.fecha, poe.hora, poe.poe, poe.valoracion, ldm.costovarmin, ldm.costovarmed, ldm.costovarmax
  2. FROM poe,ldm
  3. WHERE poe.fecha BETWEEN @fechainicio AND @fechafin
  4. AND poe.fecha = ldm.fecha
  5. AND poe.idgen = '2'
  6. AND poe.idgen = ldm.idgen
  7. ORDER BY fecha, hora;
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Encuentro medio confuso tu mensaje como para "situarme" y poder darte una mano, ¿por qué utilizas la cláusula top en la última query? Estarías obteniendo un solo registro, tampoco veo la necesidad de declarar variables pero bueno en definitiva lo que buscas es hacer un join. Te repito, si no te sirve, expláyate un poco más y veo de echarte un cable a pesar que mi entorno sea PostgreSQL.
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados