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

Problema con consulta super complicada y fechas

Estas en el tema de Problema con consulta super complicada y fechas en el foro de Mysql en Foros del Web. Hola, resulta que tengo que modificar una consulta para que entregue los resultados dentro de un rango de fechas. La consulta es de la siguiente ...
  #1 (permalink)  
Antiguo 25/03/2010, 11:28
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 6 meses
Puntos: 22
Pregunta Problema con consulta super complicada y fechas

Hola, resulta que tengo que modificar una consulta para que entregue los resultados dentro de un rango de fechas.

La consulta es de la siguiente manera:
Código MySQL:
Ver original
  1. SELECT trd_subseries.idsubserie, md, trd_subseries.codigo AS codigo, trd_subseries.nombre AS nombre, trd_series.codigo AS codigoserie, trd_series.nombre AS nombreserie, trd_unidades_administrativas.codigo AS codigounidad, trd_tipos_serie.nombre AS tiposerie, valor_documental, retencion_agestion, retencion_acentral, disposicion_final, proc_disposicion_final, MIN(YEAR(fechae_inicial)) AS ainicial, MAX(YEAR(fechae_final)) AS afinal FROM t_tabla_retencion_documental INNER JOIN trd_subseries ON trd_subseries.idsubserie = t_tabla_retencion_documental.idsubserie LEFT OUTER JOIN trd_series ON trd_series.idserie = trd_subseries.idserie AND trd_series.idserie = t_tabla_retencion_documental.idserie LEFT OUTER JOIN trd_unidades_administrativas ON trd_unidades_administrativas.idunidadadm = trd_subseries.idunidadadministrativa LEFT OUTER JOIN trd_tipos_serie ON trd_series.idtiposerie = trd_tipos_serie.idtiposerie WHERE trd_unidades_administrativas.idunidadadm = 40 AND t_tabla_retencion_documental.fechae_inicial BETWEEN 2007-01-01 AND 2009-01-01 GROUP BY trd_subseries.idserie, trd_subseries.idsubserie

Y hay un registro en la tabla "t_tabla_retencion_documental" que tiene en el campo "fechae_inicial" el valor "2008-01-01", deberia mostrarmelo peor no lo hace???
  #2 (permalink)  
Antiguo 25/03/2010, 11:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con consulta super complicada y fechas

Los valores constantes de fechas u horas deben ser escritos entre apóstrofes, para que sean reconocidos como tales, o de lo contrario se tomarán como operaciones aritméticas.
Esto:
Código MySQL:
Ver original
  1.   TSS.idsubserie,
  2.   md,
  3.   TSS.codigo,
  4.   TSS.nombre,
  5.   TS.codigo codigoserie,
  6.   TS.nombre nombreserie,
  7.   UA.codigo codigounidad,
  8.   TPS.nombre tiposerie,
  9.   valor_documental,
  10.   retencion_agestion,
  11.   retencion_acentral,
  12.   disposicion_final,
  13.   proc_disposicion_final,
  14.   MIN(YEAR(fechae_inicial)) ainicial,
  15.   MAX(YEAR(fechae_final)) afinal
  16. FROM t_tabla_retencion_documental TRD
  17.       INNER JOIN trd_subseries TSS
  18.         ON TSS.idsubserie = TRD.idsubserie
  19.       LEFT OUTER JOIN trd_series TS
  20.         ON TS.idserie = TSS.idserie
  21.         AND TS.idserie = TRD.idserie
  22.       LEFT OUTER JOIN trd_unidades_administrativas UA
  23.         ON UA.idunidadadm = TSS.idunidadadministrativa
  24.       LEFT OUTER JOIN trd_tipos_serie TPS
  25.         ON TS.idtiposerie = TPS.idtiposerie
  26.   UA.idunidadadm = 40
  27.   AND TRD.fechae_inicial BETWEEN 2007-01-01 AND 2009-01-01
  28.       GROUP BY TSS.idserie, TSS.idsubserie;
En realidad MySQL lo interpreta:
Código MySQL:
Ver original
  1.   TSS.idsubserie,
  2.   md,
  3.   TSS.codigo,
  4.   TSS.nombre,
  5.   TS.codigo codigoserie,
  6.   TS.nombre nombreserie,
  7.   UA.codigo codigounidad,
  8.   TPS.nombre tiposerie,
  9.   valor_documental,
  10.   retencion_agestion,
  11.   retencion_acentral,
  12.   disposicion_final,
  13.   proc_disposicion_final,
  14.   MIN(YEAR(fechae_inicial)) ainicial,
  15.   MAX(YEAR(fechae_final)) afinal
  16. FROM t_tabla_retencion_documental TRD
  17.       INNER JOIN trd_subseries TSS
  18.         ON TSS.idsubserie = TRD.idsubserie
  19.       LEFT OUTER JOIN trd_series TS
  20.         ON TS.idserie = TSS.idserie
  21.         AND TS.idserie = TRD.idserie
  22.       LEFT OUTER JOIN trd_unidades_administrativas UA
  23.         ON UA.idunidadadm = TSS.idunidadadministrativa
  24.       LEFT OUTER JOIN trd_tipos_serie TPS
  25.         ON TS.idtiposerie = TPS.idtiposerie
  26.   UA.idunidadadm = 40
  27.   AND TRD.fechae_inicial BETWEEN 2005 AND 2007
  28.       GROUP BY TSS.idserie, TSS.idsubserie;

Debe ir:
Código MySQL:
Ver original
  1.   TSS.idsubserie,
  2.   md,
  3.   TSS.codigo,
  4.   TSS.nombre,
  5.   TS.codigo codigoserie,
  6.   TS.nombre nombreserie,
  7.   UA.codigo codigounidad,
  8.   TPS.nombre tiposerie,
  9.   valor_documental,
  10.   retencion_agestion,
  11.   retencion_acentral,
  12.   disposicion_final,
  13.   proc_disposicion_final,
  14.   MIN(YEAR(fechae_inicial)) ainicial,
  15.   MAX(YEAR(fechae_final)) afinal
  16. FROM t_tabla_retencion_documental TRD
  17.       INNER JOIN trd_subseries TSS
  18.         ON TSS.idsubserie = TRD.idsubserie
  19.       LEFT OUTER JOIN trd_series TS
  20.         ON TS.idserie = TSS.idserie
  21.         AND TS.idserie = TRD.idserie
  22.       LEFT OUTER JOIN trd_unidades_administrativas UA
  23.         ON UA.idunidadadm = TSS.idunidadadministrativa
  24.       LEFT OUTER JOIN trd_tipos_serie TPS
  25.         ON TS.idtiposerie = TPS.idtiposerie
  26.   UA.idunidadadm = 40
  27.   AND TRD.fechae_inicial BETWEEN '2007-01-01' AND '2009-01-01'
  28.       GROUP BY TSS.idserie, TSS.idsubserie;
Además, nunca te olvides que el AND hace que las condiciones se deben cumplir al mismo tiempo, y si la fecha cumple la condición, pero el idunidadadm fuese 39, por ejemplo, el registro no saldrá porque no cumple con ambas.

Tip: Los AS son innecesarios desde hace años.
Tip 2: Usa alias en los nombres de tablas. Simplifica la lectura de las sentencias.
Tip 3: Trata de escribir estructurado, de esa forma se vuelve más sencillo entender la sentencia y se ven mejor los errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/03/2010, 17:03
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 6 meses
Puntos: 22
De acuerdo Respuesta: Problema con consulta super complicada y fechas

Mucha muchas gracias, en verdad muchisimas gracias, te voy a dar karma votos y si me pasas una cuenta paypal te dono al menos un dolar jejejeje. xD

No sabes cuanto llevava tratando de solucionar esto jiji gracias. xD

Etiquetas: fechas, super
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 15:18.