For a random drug testing system I was working on, I actually went one step back to the query of qualified records and added a random() column as a column in the result set, and ordered by that column.
select randomFunction() as RandSequence, otherfields from table order by 1
Since a random is based on an original seed, and it not going to be run at the exact same time, same second, based on probability and human interjection, it worked great. I ran the query like 50,000 times against the same "pool" of people -- one such group had over 800 people, and I stored the results. At any given time, a person was only ever in the exact same position only about 4 times, but based totally on the decimal precision difference.
Then, you can always take the top X records directly from your result set.