Selección de registros aleatorios en Access
Publicado por klave en 27th Marzo 2007
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)
- Creo un campo autonumérico que será la semilla del número aleatorio y un campo Aleat Vacío (al que hemos llamado aut).
- Actualizo el campo aleatorio con la funcion NúmAleat, y usando de semilla el campo autonumérico

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 ![]()

28th Marzo 2007 a las 14:45
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
28th Marzo 2007 a las 15:08
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
18th Abril 2008 a las 17:35
[…] Nos hemos mudado a http://www.xperimentos.com, puedes continuar leyendo este post en este enlace. […]
13th Noviembre 2008 a las 18:27
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.
15th Noviembre 2008 a las 18:46
Me ha sido de gran ayuda, era lo que estaba buscando.