Náhodné pořadí SELECTu v Accessu a SQL Serveru

9. 2. 2018, Vladimír Klaus, přečteno 72x

MS Access
SQL
SQL Server

Určitě občas potřebujete získat náhodnou sadu záznamů z dané tabulky či dotazu.  Nemělo by to být nic zásadně složitého, ale jsou tu jistá specifika, alespoň pokud jde o MS Access.

MS Access

Asi velice rychle najdete, jak řešit náhodné pořadí v Accessu.

SELECT * FROM Clanky ORDER BY RND(ID)

Jenomže také velice rychle zjistíte, že náhodné pořadí je stále stejně náhodné. Pokud byste používali Visual Basic a obecně prostředí Accessu, pak by se dalo použít funkce Randomize(), která zajistí, aby ta náhodnost byla opravdu náhodná :) Ovšem pokud potřebujete pouze zavolat nějaký dotaz nad Access databází, pak Randomize nemáte jak použít.

Po řadě pokusů, pátrání a různých testů jsem našel řešení, které docela uspokojivě funguje.

SELECT * FROM Clanky ORDER BY RND(-Timer()*ID)

SQL Server

V případě SQL Serveru je situace mnohem jednodušší a to pomocí funkce NEWID(), která generuje unikátní GUID.

SELECT * FROM Clanky ORDER BY NEWID()

Samozřejmě generování nějakou dobu trvá, takže je vhodné dotaz nějak omezit, zvláště pokud potřebujete třeba jen jeden náhodně vybraný záznam.

SELECT TOP 1 * FROM Clanky ORDER BY NEWID()

Zdroje: