Cargando...
Vamos a intentar explicar que pasos tenemos que seguir para seleccionar una muestra aleatoria de una base de datos access. Para ello lo primero que tenemos que hacer es crear un campo que contenga dicha aleatoriedad.
En mi caso siempre creo la aleatoriedad de la misma forma, un sistema un poco largo pero así se asegura la aleatoriedad (por mi trabajo es bastante importante que la muestra sea lo más aleatoria posible)

Una vez que ya tenemos la aleatoriedad, para seleccionarlo bastaría con abrir el editor de consultas en modo sql y escribir la sentencia
select top 100 * from mitabla order by aleat
Con esta query tendríamos 100 registros aleatorios. ¿Fácil verdad? pues compliquemos un poco más las cosas.
Ahora queremos dividir la base en dos grupos aleatorios (uno de ellos de 100 registros), y escribir el grupo en un campo en la base. Para que quede referencia del grupo al que pertenece el registro
La forma de crear la aleatoriedad es la misma. Además creamos un campo que se llame Grupo que será el que modifiquemos para categorizar los registros.

y lo actualizamos de la siguiente forma
<=(SELECT Max(Maximo) AS NumeroMax FROM (select TOP 100 mitabla.aleat as Maximo from mytabla order by Aleat Asc) )
![]()
Si analizamos la query vemos que lo que hacemos es coger el número aleatorio más alto de los 100 primeros registros, este es el número que nos indica el límite inferior de la selección, lo que hace que se marquen 100 registros.
Luego actualizariamos los que fueran nulos a grupo II y ya tendríamos los grupos hechos.
Interesante verdad? pero la verdad es que esto esta limitado, porque tenemos que meter el número de registros que queremos meter a fuego. Supongamos que queremos dividir en porcentaje, es decir que el 70% de los registros sean del grupo I. para ello usaremos la sentencia en la condicion de actualización de esta forma
<=(SELECT Max(Maximo) AS NumeroMax FROM (select Top 70 PERCENT Mitabla.aleat as Maximo from Mitabla order by Aleat Asc))
![]()
Es el propio access el que hace los calculos para marcar el número específico de registros. Actualizamos a “Grupo II” aquellos registros que tengan el Grupo a Nulo y… Caso resuelto
Imprime este post
7 comentarios sobre Selección de registros aleatorios en Access
Interesante… aunque yo descubrí hace tiempo que el access es aleatorio en sí mismo!!!
La última vez que usé access con un volumen de datos medio (100.000 registros en una tabla) ejecutaba la misma consulta varias veces seguidas y cada vez obtenía un número diferente (supongo que aleatorio) de registros.
Afortunadamente la técnica descrita por klave es válida para otros SGBD
A mi me ha pasado lo mismo con alguna consulta, usando access y tambien alguna vez con SAS (herramienta estadística), y detecté que era por el SQL (aun sigo sin entender porqué), algo tan tonto como usar un group by en un select distinct, devolvía diferentes registros o diferente número. Quitabas el distinct y la query se volvia estable
[...] Nos hemos mudado a http://www.xperimentos.com, puedes continuar leyendo este post en este enlace. [...]
Tengo una base de datos de 4,500 estudiantes de 40 carreras diferentes, deseo obtener una muestra aleatoria de 10 estudiantes por carrera, la base de datos que tengo esta en Excell, como le puedo hacer para que excell me de esa selección aleatoriamente.
Gracias.
Me ha sido de gran ayuda, era lo que estaba buscando.
Tengo una duda. (He leido el post de Klave, pero sigo igual)
Lo primero que tengo que decir es que no estoy al mismo nivel que vosotros, yo más bien estoy a nivel usuario.
Necesito crear 1000 códigos aleatorios que contengan 4 dígitos y 3 letras. En excel ya lo tengo, pero quería lograrlo en Access para poder utilizar la combinación de correspondencia con word (si se pudiera con Power point sería, lo máximo) Podeis ayudarme?¿ he intentado seguir los pasos de Klave, que aunque me parece sencillo al leerlo me pierdo. Yo sólo necesito la primera parte a Aut y Aleat….
Muchas Gracias por adelantado.
Hola Marga,
No me gusta mucho la opción de combinar dígitos y letras, no sólo complica la solución sino que no es una buena opción por:
Todo lo anterior resulta un poco complejo, y es difícil de explicarlo con detalle en un comentario. En el diseño de la tabla añade un nuevo campo texto, y en el valor por defecto pon la siguiente expresión:
=(9999999-1000000+1)*NúmAleat()+1000000Ahora ya tienes un campo que generará un número aleatorio de 7 dígitos. Ahora vamos a quitar 3 dígitos y añadir 3 letras (dependiendo del juego de caracteres de tu PC puede que aparezcan cosas raras).
(=Car(Ent((90-65+1)*NúmAleat()+65))+Car(Ent((90-65+1)*NúmAleat()+65))+Car(Ent((90-65+1)*NúmAleat()+65))+CCadena(Ent((9999-1000+1)*NúmAleat()+1000))IMPORTANTE / CUIDADO :De está formula pueden generarse registros que casualmente tengan el mismo código. Para generar códigos únicos deberías utilizar un campo autonumérico, pero en estos campos no puedes poner el valor aleatorio que tu quieras, sólo pueden ser números.
Para lograr lo que quieres deberías utilizar una función macro y actualizar el campo con una consulta. Esto es todavía más complejo, te adjunto un pequeño esqueleto de lo que sería una función macro, pero no está completa, faltaría comprobar que el valor es único y no existe ya en la tabla. Genera un código con 3 letras fijas y 4 números aleatorios.
Public Function dameNumeroAleatorio() As String
Dim limiteSuperior As Integer
Dim limiteInferior As Integer
Dim num As String
Dim letrasFijas As String
limiteSuperior = 9999
limiteInferior = 0
letrasFijas = "TEX"
Randomize
num = letrasFijas & CStr(Int((limiteSuperior - limite_inferior + 1) _
* Rnd + limiteInferior))
dameNumeroAleatorio = _
Replace(Space(Len(CStr(limiteSuperior)) - Len(num)) & num, _
" ", "0")
End Function
Si tengo tiempo, lo documento un poco más y hago un post con algo más de detalle.
Espero haberte ayudado,
lcflores
Deja tu comentario sobre Selección de registros aleatorios en Access
*Nota: Sólo se tendrán en cuenta los comentarios correctamente redactados y que estén relacionados con el tema de la entrada.RSS a los comentarios de esta entrada · TrackBack URI