2008-09-09 16 views
32

¿Cuál es la mejor manera de ordenar los resultados de una consulta SQL en un orden aleatorio dentro de un procedimiento almacenado?SQL Server Random Sort

+2

posible duplicado de [Cómo solicitar una fila al azar en SQL?] (Http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) – exhuma

Respuesta

55

Este es un duplicado de SO# 19412. Aquí está la respuesta que di allí:

select top 1 * from mytable order by newid() 

En SQL Server 2005 y hasta, puede utilizar TABLESAMPLE para obtener una muestra aleatoria que es repetible:

SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ; 
+0

Aunque esta no es la mejor respuesta según la otra pregunta relacionada con: http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql –

+0

Esta pregunta no es un duplicado exacto de SO # 19412 que solicita una fila aleatoria de una consulta, aunque esta esté marcada como la respuesta, ya que esto solo da 1 fila, no los resultados de la consulta ordenados aleatoriamente. –

+0

¡La punta de TABLESAMPLE es dorada! – Kong

14
select foo from Bar order by newid() 
4

No se puede simplemente ORDER BY RAND(), como usted sabe, porque solo generará un valor. Entonces usa una clave para un valor inicial.

 
SELECT RAND(object_id), object_id, name 
    FROM sys.objects 
ORDER BY 1 
7

O utilice la siguiente consulta, que devuelve una mejor resultado de muestra aleatoria:

SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float)/CAST (0x7fffffff AS int) 

0.01 significa ~ 1 por ciento de filas totales.

Presupuesto de SQL Server 2008 Libros en pantalla:

Si realmente quieres una muestra aleatoria de filas individuales, modificar la consulta para filtro cabo filas al azar, en lugar de usar TABLESAMPLE.

+2

Esto funciona más lento que TABLESAMPLE y más rápido que ORDER BY NEWID() en una gran mesa. – endo64

+0

Como estaba buscando un muestreo al azar de los resultados de una consulta, esta solución en particular me dio lo que estaba buscando, aunque la respuesta de harpo ordenaría los resultados al azar. –