Access - consultas múltiples en access 2013

 
Vista:
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue gomez (6 intervenciones) el 10/01/2017 14:38:54
hola, necesito ayuda con unas consultas de access,
Tengo 4 tablas de datos de clientes con 10 columnas cada una y 2.500.000 filas aproximadamente, cada tabla corresponde a un mes.
necesito encontrar clientes nuevos de cada mes, para esto se tienen que cumplir las siguientes condiciones:
1.- Se compara el ultimo mes (mes4) con el antepenúltimo(mes 3) para así encontrar clientes nuevos.
2.- Esos clientes nuevos no pueden estar en los meses anteriores (mes 1 y mes 2 )
3.- La tabla contiene datos repetidos de los clientes( pueden estar 2 o 3 veces repetidos)
4.- la tabla resultante de clientes nuevos, no puede tener clientes repetidos.

he realizado las siguientes consultas :
- mes 3 no coincidente con mes 4 (quitando los duplicados) = obtengo los clientes nuevos
- los no coincidentes de los meses 3 y 4 haciéndolos coincidir con mes 2 = obtengo los clientes nuevos que están en el mes
- los no coincidentes de los meses 3 y 4 haciéndolos coincidir con mes 1 = obtengo los clientes nuevos que están en el mes

me falta realizar una consulta en la cual pueda obtener los clientes nuevos del mes 4, que no estén en los meses 1 y 2. (juntar las consultas que realice anteriormente)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 11/01/2017 17:37:10
Si hubieses subido un MDB o Accdb con el diseño de las tablas y unos datos de ejemplo, pues te hacía la consulta concreta... Pero aunque das mucha información no conozco la estructura exacta de la tabla.

Si este fuera el foro de SQL te diría que eso es tirado con EXCEPT:
1
2
3
4
5
6
7
8
9
SELECT mes4.cliente FROM mes4
EXCEPT
(
SELECT mes3.cliente FROM mes3
UNION
SELECT mes2.cliente FROM mes2
UNION
SELECT mes1.cliente FROM mes1
);
En donde con la operación de conjuntos EXCEPT devuelve solo los registros de mes 4 que no estén presentes en la UNION de registros de los otros 3 meses. Y directamente no da datos repetidos y en una sola consulta lo que buscas.

Pero claro en Access (aunque depende de versión y tal), pues tendría que ser más algo así:

1
2
3
4
5
6
7
8
9
SELECT DISTINT mes4.codcliente, mes4.cliente...
FROM mes4
WHERE mes4.codcliente NOT IN (
SELECT mes3.codcliente FROM mes3
UNION
SELECT mes2.codcliente FROM mes2
UNION
SELECT mes1.codcliente FROM mes1
);

Porque las consultas de UNION no dan problemas en Access y así mas o menos (repito tendría que ver la estructura de la tabla) pues te servirá... Todo en una sola consulta y sin repetir resultados.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue (6 intervenciones) el 11/01/2017 19:15:33
Estimado muchas gracias por la respuesta.

al insertar en la consulta me aparece error de sintexis(coma) en la expresion Mes4.[Id Vivienda Empaq], Mes4.[Id Product .... y me marca la primera coma despues del WHERE. si me pudieras seguir ayudando seria genial, ya que soy nuevo en access.

lo ideal en términos simples seria de la consulta "mes 4 no coincidentes con mes 3" restarle los que están en los meses 1 y 2.

SELECT DISTINCT Mes4.[Id Vivienda Empaq], Mes4.[Id Producto Cable], Mes4.[Id Producto Internet], Mes4.[Id Producto Fono]
FROM Mes4
WHERE Mes4.[Id Vivienda Empaq], Mes4.[Id Producto Cable], Mes4.[Id Producto Internet], Mes4.[Id Producto Fono] NOT IN (
SELECT Mes3.[Id Vivienda Empaq], Mes3.[Id Producto Cable], Mes3.[Id Producto Internet], Mes3.[Id Producto Fono] FROM mes3
UNION
SELECT Mes2.[Id Vivienda Empaq], Mes2.[Id Producto Cable], Mes2.[Id Producto Internet], Mes2.[Id Producto Fono] FROM mes2
UNION
SELECT Mes1.[Id Vivienda Empaq], Mes1.[Id Producto Cable], Mes1.[Id Producto Internet], Mes1.[Id Producto Fono] FROM mes1
);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 11/01/2017 19:36:05
No veo ningún problema con comas, pero si veo un pequeño fallo en el WHERE... ten en cuenta que si en un NOT IN hay más de un campo en ambos lados, pues ambos lados deben ir entre paréntesis:

1
2
WHERE (Mes4.[Id Vivienda Empaq], Mes4.[Id Producto Cable], Mes4.[Id Producto Internet], Mes4.[Id Producto Fono]) NOT IN (
 SELECT Mes3.[Id Vivienda Empaq]..........)

Sino nos el paréntesis, pues estás intentando comparar 1 campo, concretamente Mes4.[Id Producto Fono] con varios de la subconsulta, algo no permitido.

(expr1, expr2,...) operador (subconsulta) y siempre misma cantidad de campos a ambos lados.

Por otro lado, ¿realmente necesitas tantos campos distintos en el IN para conseguir un registro único? Recuerda que Access no es Oracle o PostgreeSQL y con un solo campo a comparar en IN va bien, con más...

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue (6 intervenciones) el 11/01/2017 19:48:46
Probé con lo que me dijiste y ahora me aparece "operación no permitida en subconsultas"

y me marca lo siguiente:
1
2
3
4
5
6
SELECT Mes3.[Id Vivienda Empaq], Mes3.[Id Producto Cable], Mes3.[Id Producto Internet], Mes3.[Id Producto Fono] FROM mes3
UNION
SELECT Mes2.[Id Vivienda Empaq], Mes2.[Id Producto Cable], Mes2.[Id Producto Internet], Mes2.[Id Producto Fono] FROM mes2
UNION
SELECT Mes1.[Id Vivienda Empaq], Mes1.[Id Producto Cable], Mes1.[Id Producto Internet], Mes1.[Id Producto Fono] FROM mes1
);

de la tabla necesito el id (que vendría siendo el rut ) y los otros id que son de cada producto que tiene cada cliente. normalmente se repiten de dos a tres veces, por que son clientes que tiene uno, dos o los tres servicios contratados, (los típicos triple pack)
Lo que necesito en resumen es saber los clientes nuevos por mes ( a través del id vivienda ) que no estén en los últimos tres meses.

Te doy un ejemplo por si no me exprese bien, un cliente que tiene el servicio se va de vacaciones en diciembre, por lo tanto da de baja el servicio, y luego vuelve en febrero, este cliente no seria nuevo. es por eso que necesito que los clientes no estén en los meses anteriores(3 meses)


de ante mano muchas gracias por tu ayuda.



1
2
3
4
5
6
7
8
9
SELECT DISTINCT Mes4.[Id Vivienda Empaq], Mes4.[Id Producto Cable], Mes4.[Id Producto Internet], Mes4.[Id Producto Fono]
FROM Mes4
WHERE (Mes4.[Id Vivienda Empaq], Mes4.[Id Producto Cable], Mes4.[Id Producto Internet], Mes4.[Id Producto Fono]) NOT IN (
SELECT Mes3.[Id Vivienda Empaq], Mes3.[Id Producto Cable], Mes3.[Id Producto Internet], Mes3.[Id Producto Fono] FROM mes3
UNION
SELECT Mes2.[Id Vivienda Empaq], Mes2.[Id Producto Cable], Mes2.[Id Producto Internet], Mes2.[Id Producto Fono] FROM mes2
UNION
SELECT Mes1.[Id Vivienda Empaq], Mes1.[Id Producto Cable], Mes1.[Id Producto Internet], Mes1.[Id Producto Fono] FROM mes1
);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 11/01/2017 20:23:23
Haz favor de mandarme un archivo con unos pocos datos (sin datos personales, solo lo básico para la consulta) de cada tabla... porque a lo mejor se está pidiendo demasiado a Access y te miro de hacerla directamente yo sino así, de otra forma. Si no te la mando hoy, a lo largo de mañana la subiría.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue (6 intervenciones) el 11/01/2017 20:39:37
te adjunto un excel, las 4 tablas tienen las mismas columnas, tienen aprox. 2.500.000 filas.
no se si necesitas mas datos.

la forma en la que yo lo estaba realizando es:
- obtenía una tabla al hacer la consulta de no coincidentes de mes 4 con mes 3 (1)
- realizaba una consulta de coincidentes de mes 2 con los no coincidentes de mes 4 con mes 3 (2)
- realizaba una consulta de coincidentes de mes 1 con los no coincidentes de mes 4 con mes 3 (3)

esas 3 consultas las exportaba a excel y luego en la consulta (1) utilizaba BUCARV para buscar los datos existentes en las otras dos tablas (2) (3), luego filtraba y obtenía los datos de los clientes nuevos sin reconexion.

es por esto que busco otra forma de hacerlo en access y que este me entregue la lista de clientes nuevos.

si necesitas mas info o que explique nuevamente.

de ante mano muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 11/01/2017 22:01:18
Un placer, siempre es agradable poder ayudar con lo poco que se pueda.

Me sirve perfectamente Excel... aunque algo más de registros hubiera venido bien para ver como son los datos. Por lo que veo con los que me enviaste, todos los datos se repiten menos 4 campos:

Iden Servicio
Codi Concepto
Valor Renta
Valor Dms

Pero los campos Id Producto Cable, producto internet y producto Fono son lo mismo en los 3 (cambiando solo las columnas arriba indicadas). Tampoco cambia Id vivienda Empaq.

Ante ello se me plantean varias dudas:

-se puede considerar como un ID del cliente [Id Vivienda Empaq]

-si tenias Fono, pero no cable por ejemplo... y después contratas, se te considera cliente nuevo o no. Esto es muy importante, porque si no se considera cliente nuevo... no son campos que nos afecten de cara a mirar clientes nuevos.

-Iden Servicio considero que es un código único por cada servicio contratado, por supuesto relacionado con una vivienda/cliente, pero es solo un código, no un identificador de cliente tal cual.

-los campos que se llaman valores, pues supongo que es de precios o similares, no influyen, por tanto no importan para esto.

Si en lo anterior tengo razón, pues si solo buscas clientes nuevos y no se considera cliente nuevo el que modifica los servicios contratados (pone más, modifica cuales tiene, etc pero en si sigue siendo cliente). Pues resulta que no necesitas mirar tantos campos Id Producto específico.

Y podría servir algo más sencillito tipo:

1
2
3
4
5
6
SELECT DISTINCT Mes4.[Id Vivienda Empaq]
FROM Mes4
WHERE (((Mes4.[Id Vivienda Empaq]) Not In (SELECT Mes3.[Id Vivienda Empaq]
FROM Mes3) And (Mes4.[Id Vivienda Empaq]) Not In (SELECT Mes2.[Id Vivienda Empaq]
FROM Mes2) And (Mes4.[Id Vivienda Empaq]) Not In (SELECT Mes1.[Id Vivienda Empaq]
FROM Mes1)));

Pues te serviría. Aunque puedes poner todos los campos que quieras de la tabla Mes4 en el SELECT principal.

Si un cliente que tenía un servicio (por ejemplo cable) y contrata otro de distinto tipo que no tenía antes (por ejemplo Fono), pues ese también se considerase un cliente nuevo, pues ahí ya sería un poco más complicado.

Si no te sirve, me dicen por donde voy mal y eso, y mañana seguimos. Que ya es hora de hacer de cenar... Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue (6 intervenciones) el 12/01/2017 13:49:16
buen día estimado,
partiré respondiendo las dudas:
1.- si se puede considerar, como también lo seria [Rut Persona Empaq]
2.- no se considera como cliente nuevo
3.- en los demás puntos tienes razón

te adjuntare un excel que es a lo que estoy llegando en una primera instancia.

e intento correr el código que me enviaste y lleva como una hora ejecutando la consulta y aun nada, ayer también lo intente y tampoco termino de ejecutar la consulta.

a todo esto quiero ejecutarlo todo en access, primero para que sea mas rápida la obtención de los datos y segundo por que los datos finales de clientes no me calzan con los valores que me debería dar. entonces algún error tengo que estar cometiendo en las consultas.

de ante mano muchas gracias por toda tu ayuda.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 12/01/2017 22:16:11
La consulta te funcionaría en Access, pero si tienes tantos datos como comentas, pues es lento, aun así es raro que sea tanto. Supongo que le problema es que se ejecutan las 3 subconsultas por cada cliente del mes4... Por eso inicialmente te decía de intentarlo con operaciones de conjuntos (muchísimo más eficientes, pero claro en Access solo la UNION funciona).

Una posibilidad para hacerlo más rápido, pues podría ser crear una consulta de UNION en Access (de los meses 1, 2 y 3) y guardar el resultado en una tabla (llega con el campo objetivo), después solo consultar contra esa tabla. Aun así, incluso con lo de las 4 tablas en
Access se vuelve muchísimo más rápido que hacerlo en Excel.

Te adjunto el ejemplo que monté en Access para que le eches un ojo y hagas pruebas. Pero no tiene ningún secreto: 4 tablas importadas de excel, y una consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consultas múltiples en access 2013

Publicado por josue (6 intervenciones) el 13/01/2017 14:09:25
estimado, muchas gracias por toda tu ayuda

Viendo tu ejemplo, es justo lo que necesito, seguramente donde tengo muchos datos se demora en cargar la consulta, pero la dejare todo el día para ver que pasa, y si es demasiado intentare unir las tablas como me comentas.
Gracias por tu ayuda y que tengas un buen día.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consultas múltiples en access 2013

Publicado por Manuel (171 intervenciones) el 13/01/2017 19:24:49
Un placer, siempre sienta bien ser útil.

En Access no te debería tardar tanto como en Excel, realmente debería ser relativamente rápido.

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar