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

crear select a partir de dos subselect

Estas en el tema de crear select a partir de dos subselect en el foro de Mysql en Foros del Web. Hola a todos, Estoy un poco mareado con crear una consulta, a partir de dos subquery crear una query que muestre o compare totales del ...
  #1 (permalink)  
Antiguo 17/02/2010, 14:45
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
crear select a partir de dos subselect

Hola a todos,

Estoy un poco mareado con crear una consulta, a partir de dos subquery crear una query que muestre o compare totales del mes actual y el anterior.

No he podido dar con la solución, la idea es mostrar las cantidades de visitas actuales y la del mes anterior en una sola consulta agrupadas por categoría (especialidades médicas)

En resumen, sería la siguiente consulta pero que me muestre comparativa del mes actual vs mes anterior:

Código MySQL:
Ver original
  1. SELECT `medicos_especialidades_stats`.`especialidad` as especialidad2, COUNT(*) AS `total2`, `medicos_especialidades_stats`.`recieved` AS fecha_visita2
  2. FROM `medicos_especialidades_stats`
  3. GROUP BY `especialidad2`
  4. HAVING (MONTH(fecha_visita2) = '02') AND (YEAR(fecha_visita2) = '2010')
  5. ORDER BY `total2` DESC, `especialidad2` ASC

Había pensado utilizar subselet, pero no doy con el resultado deseado, la idea es tener algo parecido como resultado en la consulta:

especialidad1---------------enero 2009-------enero 2010
CIRUGIA BUCAL------------------10----------------11
PSIQUIATRIA ---------------------6------------------8
DIALISIS---------------------------4------------------5
UROLOGIA ADULTO--------------4------------------4
CARDIOLOGIA---------------------2-----------------3
CARDIOLOGIA PEDIATRICA-----2-----------------3
PSICOLOGIA INTEGRATIVA-----2------------------3

Muchas gracias por cualquier ayuda!

Última edición por zsamer; 17/02/2010 a las 14:57
  #2 (permalink)  
Antiguo 17/02/2010, 15:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: crear select a partir de dos subselect

Hay una forma efectiva, pero algo rústica, y otra forma ortodoxa:
Código MySQL:
Ver original
  1.     ME.`especialidad`,
  2.     SUM(IF(DATE_FORMAT(fecha_visita2, '%m/%Y') = '02/2009'), 1, 0) `Visitas 2009`,
  3.     SUM(IF(DATE_FORMAT(fecha_visita2, '%m/%Y') = '02/2010'), 1, 0) `Visitas 2010`
  4. FROM `medicos_especialidades_stats`ME
  5. GROUP BY `especialidad`
  6. ORDER BY  `especialidad`;

Otra forma:
Código MySQL:
Ver original
  1.     M1.`especialidad`, M1.fecha `Visitas 2009`, M2.fecha `Visitas 2010`
  2.       (SELECT COUNT(fecha_visita2) fecha
  3.       FROM  `medicos_especialidades_stats`
  4.       WHERE DATE_FORMAT(fecha_visita2, '%m/%Y') = '02/2009'
  5.       GROUP BY `especialidad`) M1
  6.     INNER JOIN
  7.       (SELECT COUNT(fecha_visita2) fecha
  8.       FROM  `medicos_especialidades_stats`
  9.       WHERE DATE_FORMAT(fecha_visita2, '%m/%Y') = '02/2010'
  10.       GROUP BY `especialidad`) M2
  11.     USING(especialidad)
  12. GROUP BY `especialidad`
  13. ORDER BY  `especialidad`;
__________________
¿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 18/02/2010, 09:26
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Respuesta: crear select a partir de dos subselect

gracias master, lo voy a probar, de mirada se ve muy bueno.

saludos.

Última edición por zsamer; 18/02/2010 a las 14:07
  #4 (permalink)  
Antiguo 18/02/2010, 14:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Respuesta: crear select a partir de dos subselect

Impecable ambas soluciones, muchisimas gracias.

saludos.

Etiquetas: dos, partir, select
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:37.