Agrupar y buscar registros con criterio access

Siempre me hago esta pregunta como poder agrupar y buscar registros según un determinado criterio.
Por ejemplo tengo
Estas columnas
User ip
u1 10.222.5
u1 10.222.5
u2 10.232.6
u3 10.333.5
u3 10.222.1
Lo que necesito obtener es igual user y distinto ip osea los registros de u3, me dijeron que use busq pero no se como utilizarlo en access. Ahora intento agrupar pero es un camino más largo, bueno si hay alguna forma más simple

1 Respuesta

Respuesta
1
Supongamos que tu tabla se llama 'miTabla'. Primero tienes que crear una consulta que obtenga los user-id únicos. La llamaremos 'miConsulta' y su código SQL sería:
SELECT DISTINCT miTabla.user, miTabla.ip
FROM miTabla
ORDER BY miTabla.user, miTabla.ip;
Una vez que tenemos esa consulta creada sólo tenemos que hacer una consulta de datos duplicados. El SQL de esta nueva consulta sería:
SELECT miConsulta.user, miConsulta.ip
FROM miConsulta
WHERE miConsulta.user In (SELECT [user] FROM [miConsulta] As Tmp GROUP BY [user] HAVING Count(*)>1)
ORDER BY miConsulta.user, miConsulta.ip;
Creo que es eso lo que quieres.
Gracias Experto por la respuesta me sirvió de mucho pero me queda una duda,
¿Entiendo qué el segundo select lo ingreso en el área de criterio de la consulta en diseño?, en el campo user.
¿Cuándo ocupo sentencias sql en diseño en un determinado campo, puedo hacer referencia a otro campo de la tabla por ejemplo en un where? O solo hago referencia al campo donde situé la subconsulta.
Otra cosa con la consulta que me enseñas no obtengo los user únicos donde sus ip son distintas me muestra todos los user agrupados con sus respectivas Ip, quizás se podría contrar la cantidad de ip solo si son distintas, si me puedes aclarar por favor Maestro y muchas gracias por la ayuda, excelente sitio.
El código que te he puesto tienes que copiarlo en la vista SQL de la consulta.
Si quieres hacerlo en la vista de diseño normal de Access, tendrías que poner en los criterios del campo user lo siguiente:
In (SELECT [user] FROM [miConsulta] As Tmp GROUP BY [user] HAVING Count(*)>1)
De todas formas, ten en cuenta que la primera consulta se dedica a obtener los valores únicos de usuario-ip, mientras que la segunda la podrías crear con la ayuda de access como una consulta de registros duplicados sobre la primera consulta.
Si lo que quieres es saber el número de diferentes IPs tiene cada usuario que se ha conectado desde más de un IP, el SQL sería:
SELECT miConsulta.user, count(*) as numeroIPs
FROM miConsulta
WHERE miConsulta.user In (SELECT [user] FROM [miConsulta] As Tmp GROUP BY [user] HAVING Count(*)>1)
GROUP BY miConsulta.user;
Por último si quieres que también aparezcan los que se han conectado desde un único IP, la consulta sería:
SELECT miConsulta.user, count(*) as numeroIPs
FROM miConsulta
GROUP BY miConsulta.user;
Gracias santiagomf
Ya lo hice me queda más claro, pero aun no logro obtener el numero de IPs diferentes de cada usuario, con la consulta me cuenta el total de IPs que tiene un usuario pero no las diferentes, y eso es lo que me interesa, por ejemplo el usuario1 tiene 5 Ip iguales que las cuente como un solo caso, si el usuario2 tiene 5 ip y una es diferente que marque 2 no se si me explico, por favor.
Muchas gracias por tu tiempo.
Eso que quieres te tiene que salir haciendo las dos consultas que te he puesto. Dime una dirección de correo y te mando un ejemplo.
Aquí va (separado por guion bajo) [email protected]
Acabo de mandarte una base de datos con las consultas.
Gracias, pero sabes no lo puedo ver, puedes comprimir el archivo, ya que si la envías como mdb el correo lo bloqueará y no tengo forma de recuperarlo, si lo comprimes en rar o zip te lo agradezco.
Saludos.
Acabo de enviarte el fichero comprimido. La clave es: smf

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas