Я пытаюсь выбрать случайную 10% выборку из небольшой таблицы. Я решил использовать функцию RAND () и выбрать те строки, в которых случайное число меньше 0,10:
SELECT * FROM SomeTable
WHERE SomeColumn='SomeCondition' AND
RAND() < 0.10
Но вскоре я обнаружил, что RAND () всегда возвращает одно и то же число! Напоминает мне об этом xkcd мультфильм .

ОК, нет проблем, функция RAND принимает начальное значение. Я буду периодически выполнять этот запрос, и я хочу, чтобы он давал разные результаты, если я запускаю его в другой день, поэтому я заполняю его комбинацией даты и уникального идентификатора строки:
SELECT * FROM SomeTable
WHERE SomeColumn='SomeCondition' AND
RAND(CAST(GETDATE) AS INTEGER) + RowID) < 0.10
Я до сих пор не получил никаких результатов! Когда я показываю случайные числа, возвращаемые RAND, я обнаруживаю, что все они находятся в узком диапазоне. Похоже, что для получения случайного числа из RAND необходимо использовать случайное начальное число. Если бы у меня было случайное начальное число, мне бы не понадобилось случайное число!
Я видел предыдущие обсуждения, связанные с этой проблемой:
Случайная сортировка SQL Server
Как запросить случайную строку в SQL?
Они не помогают мне. TABLESAMPLE работает на уровне страницы, что отлично подходит для большой таблицы, но не для маленькой, и похоже, что она применяется до предложения WHERE. TOP с NEWID не работает, потому что я не знаю заранее, сколько строк я хочу.
У кого-нибудь есть решение или хотя бы подсказка?
Редактировать: Спасибо AlexCuse за решение , которое работает для моего конкретного случая. Теперь к большему вопросу, как заставить RAND вести себя?