01 febrero 2012

Recuperar filas aleatoriamente de una tabla con Transact-SQL

Yo lo he leído en el blog de James D. McCaffrey pero no tengo más mérito, es uno de los muchos resultados de su búsqueda en Google sugerida por un alumno que ya lo había encontrado antes. Sea como sea, no conocía este método para obtener una fila de una tabla de forma aleatoria.

Se basa en una combinación de newid() y top(). La primera función devuelve un valor uniqueidentifier, valioso para crear datos ficticios con los que probar una base de datos, por ejemplo. O para lo que nos ocupa:

select @result = (select top(1) pid from @mytable order by newid() )



Ya puestos, como sospecho que top() es la respuesta de Microsoft al limit de MySQL, también he buscado lo mismo para este motor. No pierdo tiempo, la primera página que me ha ofrecido Google, de El blog de Neurotic:

SELECT * FROM nombre_tabla WHERE condicion
ORDER BY RAND()
LIMIT 1; 


Ahora ya que cada cual se meta o no en la guerra de si una es más elegante, simple, intuitiva, etc. que la otra.

No hay comentarios:

Publicar un comentario

Los comentarios son revisados antes de su publicación en prevención de usos incorrectos (spam o alusiones insultantes a terceros). Por eso, tu comentario puede tardar un poco, no mucho, en ser visible.