Access - 10 Valores más aproximados

Soy novata y necesito resolver algo en mi trabajo.

Tengo una tabla en access y me gustaría poder hacer una consulta que me devuelva los 10 Valores que más se acerquen a un valor determinado. Con Dmin y DMAX sólo consigo 2 y preciso al menos de 10 inicialmente.

2 respuestas

Respuesta
1

Puedes hacer una consulta del tipo Select top x. Para eso crea una consulta con los campos que necesites de tu tabla, ordenados de menor a mayor por el campo que ( asegúrate de poner ese campo como el primero de la consulta), y luego, o bien cambias a vista SQL y añades un "top 10" justo después del Select, o bien en la cinta de opciones donde pone "Devuelve", le cambias el todo por un 10 . Con eso tendrás los 10 valores más bajos.

Para los mayores, haces otra consulta igual, pero ordenando de mayor a menor.

Obviamente a las consultas de puedes añadir los criterios que necesites para filtrar los datos.

Hola, muchas gracias por la respuesta. He probado lo del "top10" después de select y no ha funcionado... Algo estaré haciendo mal.

Pues si no dices lo que has hecho, malamente podré ayudarte a solucionarlo...

Por ponerte un ejemplo:

Tengo una tabla con distancias (y además, desordenadas):

Hago una consulta con esta SQL:

SELECT TOP 10 TDistancias.ID, TDistancias.Recorrido, TDistancias.Distancia
FROM TDistancias
WHERE (((TDistancias.Distancia)<=[Pon una distancia]))
ORDER BY TDistancias. Distancia DESC;

o lo que es lo mismo, con este diseño (fíjate en el Devuelve 10, que en realidad es el TOP 10 que sigue al SELECT):

Al ejecutarla, me pregunta por una distancia (para el caso le puse 10.000) y me da los 10 registros que tienen una distancia menor o igual a 10.000m:

Muchas gracias por tus explicaciones, creo que voy a contarte directamente el problema que tengo y ver si es posible solucionarlo.

Parto de una tabla que tiene esta pinta:

Cada una de las líneas NS3, NS2, NNV, etc... tiene asociado tres cifras, que son referencias, lineas y unidades.

Por otro lado, tengo una tabla por cada una de estas categorías (NS3, NS2, NNV, etc...). Estas tablas son un histórico de tiempos de ejecución de cada uno de las categorías, pero los valores no se repiten 2 veces.

Actualmente abro por cada una de las categorías su tabla y la paso a excel. Marco en color amarillo los 10 valores que más se acercan de la primera columna (referencias), esos 10 valores tienen distintos valores de la segunda columna (líneas), marco las que más se acercan (normalmente unas 4), de sas 4 busco la que tiene el valor asociado que más se acerca al de la tabla dada en unidades.

Una vez seleccionados cuales son en el histórico, los valores que más se acercan, obtengo el valor promedio de unidades por hora y con ese valor y las unidades de la tabla calculo el tiempo de ejecución que no debe ser superior a 24h.

Ejemplo:

El promedio de esos dos valores es 179,85 uds/h, como tengo 1305 uds, son 7,25h.

Esto lo repito tantas veces como categorías y si alguno se pasa de las 24h, lo reporto para que calculen una nueva tabla y vuelta a repetir.

Si puedo tener una consulta que me devuelva los 10 valores de la primera columna que más se acerquen, de esos 10 los 4 que más se acerquen en la segunda columna y finalmente obtengo 2 valores que más se acerquen de la tercera y obtengo el promedio... no tardaré dos horas al día en hacer esto y conseguiré llegar a hacer todas mis tareas diarias....

Siento el rollo, pero creo que sino me explico así no me haré entender.

Muchas gracias de antemano.

Te he preparado un ejemplo, a partir de lo que entiendo que tienes y buscas:

http://www.filebig.net/files/pTykJdupX9 

El ejemplo consta de dos partes (o formas de hacerlo):

La primera, que son las Consultas (Consulta1, Consulta2, Consulta3 y ConsultaUnica), trabajan como consultas en cascada: en la primera se pide el valor de la referencia y te da los 10 que más se acercan. La segunda, te pide la linea y te devuelve los 4 valores más próximos de la consulta anterior (te pedirá también la referencia). La tercera, te pide las unidades y te devuelve los dos valores de la Consutla2 que más se acercan a esas unidades (te pedirá la referencia y linea también). En la CosnultaUnica, tienes resumida las tres anteriores.

La segunda forma, en vez de pedir los valores, los busca en la tabla TAux, por medio de la función DBúsq(). Te puse como sería en 3 consultas y en una sola.

Por último, la consulta Media-NS3 (hecha sobre la segunda forma), hace los cálculos que indicas: media de los dos valores que devuelve OtraConsutlaUnica, el número de unidades que hay, y el número de horas.

Respuesta

Reconozco que las consultas no me gustan pero... Si tengo la tabla Clientes

Como no sé que campo usas para fijar el valor, ni que tipo de valor es, voy a usar el idcliente. Construyo una consulta como en la imagen

Uso Escriba un valor para "seleccionar" a partir de donde quiero que cuente. Cuando la voy a abrir, me preguntará por el valor, lo escribo

Al abrirla

Es decir, me va mostrando aquellos registros tanto antes como después en que la diferencia es menor. Aunque yo los tengo por orden, da igual, lo que importa es la diferencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas