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

Revisar mes a mes dentro de un rango

Estas en el tema de Revisar mes a mes dentro de un rango en el foro de Bases de Datos General en Foros del Web. Hola a todos, Por mucho tiempo ustedes me han sido de ayuda resolviendo dudas, como novato en BDD les agradezco la creación del foro.. pero ...
  #1 (permalink)  
Antiguo 10/01/2011, 10:34
 
Fecha de Ingreso: enero-2011
Mensajes: 4
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Revisar mes a mes dentro de un rango

Hola a todos,

Por mucho tiempo ustedes me han sido de ayuda resolviendo dudas, como novato en BDD les agradezco la creación del foro.. pero me he visto en la necesidad de preguntarles pues no encuentro cómo realizar lo siguiente.


Lo que deseo hacer es contar todos los registros que están dentro de un rango de 12 meses, pero debo mostrar el resultado del count mes a mes.

i.e.:
Si me ingresan 31-12-2010 debo contar todos los tnum, mes a mes, desde enero de 2010 a dic 2010.

Quiero mostrar algo así:

Código HTML:
Ver original
  1. date               tnum
  2. enero 2010             12
  3. febrero 2010           15
  4. marzo 2010             5

El problema son los select anidados (sub-consultas) que según noté en mi resultado, cuenta todos los meses y no mes a mes.

Cualquier ayuda sería muy agradecida.

El código:
Código SQL:
Ver original
  1. SELECT DATEADD(mm,DATEDIFF(mm,0,astart),0) AS DATE,
  2. (
  3.   (SELECT COUNT (DISTINCT tnum)
  4.   FROM worder
  5.   WHERE astart  >= CONVERT( DATETIME,'01-06-2010',105)
  6.   AND astart     < CONVERT(DATETIME,'31-12-2010',105)
  7.   AND STATUS  IN ('COMP','CLOSE')
  8.   AND istsk  = 0
  9.   AND SUBSTRING(location,1,1)='E'
  10.   AND num NOT IN
  11.     (SELECT rkey FROM multi WHERE reclass='WORKORDER')
  12.   )
  13.   +
  14.   (SELECT COUNT (DISTINCT tnum)
  15.   FROM multi
  16.   WHERE rkey IN
  17.     (SELECT num
  18.     FROM worder
  19.     WHERE astart  >= CONVERT( DATETIME,'01-06-2010',105)
  20.     AND astart     < CONVERT(DATETIME,'31-12-2010',105)
  21.     AND STATUS  IN ('COMP','CLOSE')
  22.     AND istsk = 0
  23.     AND SUBSTRING(location,1,1)='E')
  24.   )
  25. )  AS numeros
  26. FROM dummy_table
  #2 (permalink)  
Antiguo 10/01/2011, 10:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Revisar mes a mes dentro de un rango

SELECT SUM(tucampo) tnum, MONTHNAME(campofecha) mes, YEAR(campofecha) anio FROM tutabla WHERE YEAR(campofecha) = YEAR('2010-12-31') GROUP BY YEAR(campofecha), MONTH(campofecha)

No olvides que un mes no es un mes, sino un mes de un año. El nombre del mes lo recuperarás en inglés, pero sobre eso podemos trabajar.
  #3 (permalink)  
Antiguo 10/01/2011, 11:02
 
Fecha de Ingreso: enero-2011
Mensajes: 4
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Revisar mes a mes dentro de un rango

Gracias por tu ayuda jurena, el problema está en mis subconsultas, no pueden retornar multiples valores... lo que necesito es hacer las subconsultas mes a mes... pero no tengo idea como hacerlas correctamente... u.u
  #4 (permalink)  
Antiguo 10/01/2011, 11:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Revisar mes a mes dentro de un rango

explícanos de un modo concreto y con ejemplos qué quieres hacer con esas subconsultas y te ayudaremos a prepararlas.
  #5 (permalink)  
Antiguo 10/01/2011, 11:33
 
Fecha de Ingreso: enero-2011
Mensajes: 4
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Revisar mes a mes dentro de un rango

Código SQL:
Ver original
  1. (SELECT COUNT (DISTINCT tnum)
  2.   FROM worder
  3.   WHERE astart  >= rango_fecha
  4.   AND astart     < rango_fecha
  5.   AND STATUS  IN ('COMP','CLOSE')
  6.   AND istsk  = 0
  7.   AND SUBSTRING(location,1,1)='E'
  8.   AND num NOT IN
  9.     (SELECT rkey FROM multi WHERE reclass='WORKORDER')
  10.   )

Esta es una subconsulta que me retorna el conteo de los tnum de la tabla worder, que cumplen con las condiciones y ademas, está en el rango de fecha establecido.

Por Ejemplo, rango de fecha: 01-01-2010 al 31-12-2010
Tengo que contar, mes a mes, dentro de ese rango, todos los tnum y retornarlos a la consulta principal.


Código SQL:
Ver original
  1. (SELECT COUNT (DISTINCT tnum)
  2.   FROM multi
  3.   WHERE rkey IN
  4.     (SELECT num
  5.     FROM worder
  6.     WHERE astart  >= rango_fecha
  7.     AND astart     < rango_fecha
  8.     AND STATUS  IN ('COMP','CLOSE')
  9.     AND istsk = 0
  10.     AND SUBSTRING(location,1,1)='E')
  11.   )

Esta es la segunda subconsulta, que se suma a la primera, está en el mismo rango de fechas, y debo obtener mes a mes todos los tnum de esta consulta, sumarlos al mes que corresponde a la primera y retornar el valor a la consulta principal...

Select ( Consulta_1 + Consulta_2) from dummy_table;

Resultado esperado:

Código HTML:
Ver original
  1. date                   tnum
  2. enero 2010             12
  3. febrero 2010           15
  4. marzo 2010             5
  5. abril 2010              10
  6. etc...




PD: sería como del rango principal, tomar cada mes y hacer la consulta. Pero, sin procedure o function.
  #6 (permalink)  
Antiguo 10/01/2011, 12:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Revisar mes a mes dentro de un rango

No he probado esto, y tampoco sé si te falseará datos, en tu intento de contar los diferentes de cada tabla, aunque sean coincidentes en las dos tablas.
Mira a ver si esto te da algo:

SELECT COUNT(DISTINCT tnum) tnum, MONTHNAME(astart), YEAR(astart) FROM ((SELECT tnum, astart
FROM multi
WHERE rkey IN
(SELECT num
FROM worder
WHERE astart >= rango_fecha
AND astart < rango_fecha
AND STATUS IN ('COMP','CLOSE')
AND istsk = 0
AND substring(location,1,1)='E')
)
UNION ALL
(SELECT tnum, astart FROM worder WHERE astart >= rango_fecha AND astart < rango_fecha AND STATUS IN ('COMP','CLOSE') AND istsk = 0 AND substring(location,1,1)='E' AND num NOT IN (SELECT rkey FROM multi WHERE reclass='WORKORDER') )) GROUP BY YEAR(astart), MONTH(astart)
  #7 (permalink)  
Antiguo 10/01/2011, 12:14
 
Fecha de Ingreso: enero-2011
Mensajes: 4
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Revisar mes a mes dentro de un rango

lo probaré y aviso.. meditaré en el nuevo enfoque.


Sigo probando y no obtengo resultados satisfactorios, alguna otra idea?. Gracias

Última edición por iizAck; 10/01/2011 a las 13:18
  #8 (permalink)  
Antiguo 10/01/2011, 15:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Revisar mes a mes dentro de un rango

¿Por qué no son satisfactorios?

Etiquetas: rango, revisar
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 11:23.