SQL: Losowanie rekordów czyli jakby funkcja RAND()

6-gru-2012

Potrzebna mi funkcja losująca pytania. O jak świetnie – jest w TSQL funkcja RAND(), która zwraca losową wartość, ale…:

USE AdventureWorks2008R2

SELECT TOP(10) p.LastName, RAND() AS rnd FROM Person.Person p

ORDER BY rnd

…zwraca zawsze te same rekordy! Dlaczego? Bo RAND uruchomił się jeden raz i w każdym rekordzie wartość w kolumnie rnd jest taka sama.

Trzeba więc generować coś losowego w taki sposób, aby wartość powstawała dla każdego rekordu. Zapytanie poniżej radzi sobie ztym idealnie:

SELECT TOP(10) p.LastName, NEWID() AS rnd FROM Person.Person p

ORDER BY rnd

 

Komentarze są wyłączone

Autor: Rafał Kraik