Выберите случайные строки семян на сервере SQL
Я пытаюсь выбрать случайные строки в Sql Server, используя начальное число. Я знаю о функции newid()
Однако я не мог найти способ использовать начальное число с этой функцией. Я хочу запустить такой код:
select user_id from users;
go
Приведенный выше код выбирает пользователей не случайным образом, мне нужна помощь в его изменении, чтобы выбирать пользователей случайным образом в соответствии с начальным числом. Так что, если я запущу тот же выбор с тем же начальным числом, я получу тех же пользователей.
Спасибо Клинт
2 ответа
Это из MSDN, который выберет число от 0 до 99 и примерно 10 процентов:
SELECT * FROM Table1
WHERE (ABS(CAST(
(BINARY_CHECKSUM(*) *
RAND()) as int)) % 100) < 10
Итак, если вы хотите от 0 до 19, используйте, например, 20 вместо 100.
У меня не очень элегантное решение, но стоит попробовать, как:
SELECT DISTINCT user_id, user_name, RandVal FROM (
SELECT CAST(RIGHT(CAST(RAND(user_id)*100 as varchar(100)),3) as int) as RandVal, user_id, user_name
FROM users) T
WHERE RandVal BETWEEN 700 and 900
Посмотрите мою демонстрацию Fiddle
я использовал user_id
как семя.
И этот тоже:
SELECT TOP 5 user_id, MAX(user_name), MAX(RandVal) as RandVal FROM (
SELECT CAST(RIGHT(CAST(RAND(user_id)*100 as varchar(100)),2) as int) as RandVal, user_id, user_name
FROM users) T
GROUP BY user_id
ORDER BY RandVal
Смотрите мое демо для этого тоже.
Попробуйте это, чтобы получить 10 случайных пользователей:
SELECT user_id From users WHERE rand()>0.5 limit 10;