Можно ли в MS Access генерировать случайные числа, которые не меняются при каждом выполнении запроса?

Я пытаюсь получить случайный набор из 200 записей из моей базы данных Microsoft Access. Я создал запрос и использовал функцию rnd() в новом поле, чтобы сгенерировать случайное число для каждой записи. Затем я отсортировал поле случайных чисел и получил 200 лучших статей. Моя проблема в том, что каждый раз, когда я запускаю запрос, я получаю разные случайные числа. Я знаю, что в других программах можно установить пользовательское значение для начального числа, и эта проблема будет исправлена, однако я не знаю, как самому установить начальное значение в MS Access. Возможно ли это сделать?

Спасибо за помощь!


person Chris    schedule 26.05.2011    source источник


Ответы (2)


Вы пробовали читать справку по Access для функции Rnd()? Функция имеет один аргумент, а файл справки определяет, что делает семя:

   If number is            Rnd generates 
   Less than zero          The same number every time, using number as the seed. 
   Greater than zero       The next random number in the sequence. 
   Equal to zero           The most recently generated number. 
   Not supplied            The next random number in the sequence. 

Итак, вы хотите передавать отрицательное число, одинаковое для каждой строки при каждом выполнении запроса. Autonumber PK был бы идеальным кандидатом для этого, поскольку он будет уникальным — просто используйте Rnd(-MyPK).

Единственная проблема будет, если вы используете случайные автономера, и в этом случае некоторые числа уже будут отрицательными, поэтому у вас возникнет проблема. У меня нет хорошего решения для этого, которое позволило бы избежать коллизий (т. е. двух строк, производящих одно и то же значение, потому что они имеют одинаковое абсолютное значение) и не привело бы к переполнению.

person David-W-Fenton    schedule 28.05.2011

Просто возвести в квадрат автонумерацию, прежде чем брать отрицательный результат, чтобы устранить «уже отрицательную» проблему?

person joeb    schedule 26.07.2011