post icon

Obtener un registro de la base de datos aleatoriamente mediante SQL

Si lo que necesitas es obtener una o un par de filas de tu base de datos de manera “randomica”  existen muchas soluciones que se pueden implementar, desde hacer un “select silvestre” y desde alguna aplicación que utilice algoritmos que permitan seleccionar un registro de manera aleatoria, hasta “cocinarlo” en desde la misma base de datos.

Dependiendo el contexto de trabajo es conveniente elegir una opción u otra. Pero ésta vez quiero centrarme más bien en hacer el trabajo desde la Base de Datos, con un Query SQL para los distintos motores que disponemos.

Microsoft SQL Server:

SELECT TOP 1 columna FROM tabla
ORDER BY NEWID();

Oracle:

SELECT columna FROM
(SELECT columna FROM tabla
ORDER BY dbms_random.value )
WHERE rownum = 1;

MySQL:

SELECT columna FROM tabla
ORDER BY RAND()
LIMIT 1;

PostgreSQL:

SELECT columna FROM tabla
ORDER BY RANDOM()
LIMIT 1

Firebird:

Este motor no tiene una solución directa pero con un “truco” podemos obtener un registro aleatorio, el requisito es tener una columna con valor numérico y que se único.

SELECT FIRST 1 t.columna
FROM tabla t
ORDER BY (t.columna_numerica + seed)*4294967291
-((t.columna_numerica + seed)
*4294967291/49157)*49157;

DB2:

SELECT columna, RAND() as IX
FROM tabla
ORDER BY IX FETCH FIRST 1 ROWS ONLY;

Si quieren cambiar la cantidad de filas aleatorias devueltas, simplemente van variando el valor del limitador como cualquier otra consulta, si conocen otros métodos para aplicarlos a algún motor que esté o no en la lista pueden compartirlos en los comentarios..

Comentarios desde Facebook:

  1. avatar
    Maximo PERU Google Chrome Windows
    29 septiembre 2014 at 20:01 #

    Realmente se lo agradesco me sirvio bastante

Responder