Jaki jest najlepszy sposób sortowania wyników kwerendy sql w kolejności losowej w procedurze przechowywanej?Sortowanie losowe serwera SQL
Odpowiedz
To jest duplikat SO# 19412. Oto odpowiedź dałem tam:
select top 1 * from mytable order by newid()
W SQL Server 2005 iw górę, można użyć TABLESAMPLE dostać losową próbkę, która jest powtarzalna:
SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ;
Chociaż nie jest to najlepsza odpowiedź na inne pytanie związane z: http://stackoverflow.com/questions/19412/how-to-request-a-randomflow-in-sql –
To pytanie nie jest dokładnym duplikatem SO # 19412, który prosi o losowy wiersz z zapytania, nawet jeśli jest to zaznaczone jako odpowiedź, ponieważ daje to tylko 1 wiersz, a nie wyniki losowego sortowania zapytania. –
Wskazówka TABLESAMPLE jest złota! – Kong
select foo from Bar order by newid()
Nie można po prostu zamówić RAND(), jak wiadomo, ponieważ wygeneruje tylko jedną wartość. Tak więc użyj klucza do wartości początkowej.
SELECT RAND(object_id), object_id, name FROM sys.objects ORDER BY 1
też użyć następującej kwerendy, która zwraca się lepszym losowy wynik próbki:
SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float)/CAST (0x7fffffff AS int)
0,01 oznacza ~ 1 procent wszystkich wierszy.
Cytat SQL 2008 Books Online:
Jeśli naprawdę chcesz losową próbkę poszczególnych rzędach, zmodyfikować zapytanie do odfiltrować wiersze losowo zamiast użyciu TABLESAMPLE.
To działa wolniej niż TABLESAMPLE i jest szybsze niż ORDER BY NEWID() na dużym stole. – endo64
Gdy szukałem losowego próbkowania z wyników zapytania, to konkretne rozwiązanie dało mi to, czego szukałem, chociaż odpowiedź Harpo zamawiałaby losowo wyniki. –
możliwe duplikat [Jak zwrócić losowe wiersza w SQL?] (Http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) – exhuma