Как использовать случайные числа для получения действительно случайных результатов? ABS (CHECKSUM (NewID))) не работает - PullRequest
0 голосов
/ 29 мая 2020

Каждый раз, когда я запускаю запрос, мне нужны разные результаты.

Если I

SELECT AccountNumber
FROM TABLE

без других спецификаций, таблица по умолчанию возвращает записи в порядке номеров счетов (i не контролируйте это).

Мое решение (я думал) было:

SELECT ABS(CHECKSUM(NewID())) [RandomNumber], AccountNumber
INTO #tempTABLE
FROM TABLE
ORDER BY [RandomNumber]

Таким образом, вся новая таблица строится по случайным образом сгенерированным числам. Тогда я мог бы просто

SELECT TOP 1 AccountNumber
FROM #tempTABLE

Я обнаружил, что существует очень высокая вероятность того, что наименьшее случайное число будет коррелировать с наименьшим номером счета. Короче говоря, эта стратегия случайных чисел очень часто дает одни и те же результаты. Мне нужно, чтобы результаты моего запроса были разными, случайным образом выбранным номером учетной записи каждый раз, когда я его запускаю.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Вы должны добавить заказ по к вашему (2-му) запросу выбора:

SELECT TOP 1 AccountNumber
FROM #tempTABLE
ORDER BY [RandomNumber]
1 голос
/ 29 мая 2020

В качестве ярлыка вы можете просто заказать по сгенерированному guid.

SELECT TOP(1) 
    AccountNumber
FROM 
   TABLE
ORDER BY
    NewID()
...