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

Consulta imposible

Estas en el tema de Consulta imposible en el foro de Mysql en Foros del Web. Hola a tod@s, llevo un par de horas para lograr obtener los datos de una consulta, que hasta el momento se me han antojado imposible. ...
  #1 (permalink)  
Antiguo 24/08/2009, 18:11
 
Fecha de Ingreso: noviembre-2003
Ubicación: España->Madrid
Mensajes: 368
Antigüedad: 20 años, 5 meses
Puntos: 0
Pregunta Consulta imposible

Hola a tod@s,

llevo un par de horas para lograr obtener los datos de una consulta, que hasta el momento se me han antojado imposible. Tengo MySQL > 5, por lo que es posible realizar subqueries.

Actualmente tengo 3 tablas:
- pasos (ID, paso)
- contactos2pasos (ID, Id_contacto, Id_paso, fecha)
- contactos (ID, origen, fecha ...)

Los datos que quiero obtener son los siguientes: ¿Cuántas personas, en el rango de fechas especificado -cuenta la fecha de registro del contacto no del contactos2pasos-, se encuentran en cada paso? Hay que tener en cuenta, que una persona puede haber estado en varios pasos, pero sólo nos interesa el último -detectable vía contactos2pasos.fecha.

Al final, lo que yo quiero es:
- Paso 1: 12 contactos
- Paso 2: 10 contactos
...

Y lo mismo, pero desglosado por el campo origen de la tabla contactos.

¿Imposible?

Última edición por SuRpRiSe18; 24/08/2009 a las 18:19
  #2 (permalink)  
Antiguo 24/08/2009, 19:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta imposible

Cita:
¿Imposible?
No creo.

Pero debes ser un poco mas grafico en la explicación.
Compartenos un ejemplo de algunos datos de las tablas y como esperarías la salida.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/08/2009, 02:01
 
Fecha de Ingreso: noviembre-2003
Ubicación: España->Madrid
Mensajes: 368
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Consulta imposible

Hola huesos52,

La tabla pasos, tendría los siguientes datos (ID, paso):
- 1, Pendiente llamada
- 2, Imposible contactar
- 3, Paquete enviado
- 4, Pendiente pago

La tabla contactos (ID, origen, fecha):
- 1, Google, 2009-08-01 00:00:00
- 2, Google, 2009-08-02 00:00:00
- 3, Yahoo!, 2009-08-03 00:00:00

La tabla contactos2pasos (ID, Id_contacto, Id_paso, fecha):
- 1, 1, 1, 2009-08-01 00:00:00
- 1, 1, 2, 2009-08-01 12:00:00
- 1, 2, 1, 2009-08-02 00:00:00
- 1, 3, 1, 2009-08-03 00:00:00
- 1, 3, 2, 2009-08-03 08:00:00
- 1, 2, 2, 2009-08-03 09:00:00
- 1, 1, 3, 2009-08-03 10:00:00
- 1, 1, 4, 2009-08-03 11:00:00

Entonces, la consulta me tendría que devolver (pasos.ID, numero_contactos):
- 1, 0
- 2, 2
- 3, 0
- 4, 1

Gracias por todo
-
  #4 (permalink)  
Antiguo 25/08/2009, 04:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta imposible

EDITO:
No sé si será la más eficiente:
Código sql:
Ver original
  1. SELECT pasos.ID, IFNULL(t2.NUMERO,0) NUMERO_CONTACTOS FROM pasos
  2.  LEFT JOIN (SELECT COUNT(*) NUMERO, T1.ultpaso PASO
  3.  FROM (SELECT cp.id_contacto, MAX(cp.id_paso) ultpaso
  4.  FROM contactos c INNER JOIN contactos2pasos cp ON c.ID = cp.id_contacto GROUP BY c.ID)t1
  5.  GROUP BY T1.ultpaso)t2 ON pasos.id = t2.PASO
  6.  ORDER BY pasos.ID

Buscando un rango de fechas (esto no lo he probado):
Código sql:
Ver original
  1. SELECT pasos.ID, IFNULL(t2.NUMERO,0) NUMERO_CONTACTOS FROM pasos
  2.  LEFT JOIN (SELECT COUNT(*) NUMERO, T1.ultpaso PASO
  3.  FROM (SELECT cp.id_contacto, MAX(cp.id_paso) ultpaso
  4.  FROM contactos c INNER JOIN contactos2pasos cp ON c.ID = cp.id_contacto WHERE c.fecha BETWEEN '2009-02-01' AND '2009-02-15' GROUP BY c.ID)t1
  5.  GROUP BY T1.ultpaso)t2 ON pasos.id = t2.PASO
  6.  ORDER BY pasos.ID

Última edición por jurena; 25/08/2009 a las 05:13
  #5 (permalink)  
Antiguo 25/08/2009, 04:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: España->Madrid
Mensajes: 368
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Consulta imposible

Hola Jurena,

gracias por la respuesta. Lo que yo busco, es saber cuantos hay en el paso X, teniendo en cuenta sólo el último paso de cada contacto.

Por eso en mi ejemplo, sólo hay 2 en el paso 2 y 1 en el paso 4. Porque sólo tengo en cuenta el último paso en que se encuentra.

gracias de todas formas!
  #6 (permalink)  
Antiguo 25/08/2009, 07:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta imposible

Pero eso lo hace la primera consulta que te puse. Edité, corregí y añadí estas consultas y quizás no las has puesto a prueba: prueba la primera y verás que el resultado es el que buscabas.
  #7 (permalink)  
Antiguo 25/08/2009, 07:45
 
Fecha de Ingreso: noviembre-2003
Ubicación: España->Madrid
Mensajes: 368
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Consulta imposible

Impresionante gracias Yurena (no vi las modificaciones antes perdona!)
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 02:31.