シードを使用して Sql Server でランダムな行を選択しようとしています。関数は知ってnewid()
いますが、この関数でシードを使用する方法が見つかりませんでした。次のようなコードを実行したい:
select user_id from users;
go
上記のコードは、ランダムな方法でユーザーを選択するのではなく、シードに従ってユーザーをランダムに選択するように変更する際に支援が必要です。同じシードで同じ選択を実行すると、同じユーザーが取得されます。
ありがとう、クリント
シードを使用して Sql Server でランダムな行を選択しようとしています。関数は知ってnewid()
いますが、この関数でシードを使用する方法が見つかりませんでした。次のようなコードを実行したい:
select user_id from users;
go
上記のコードは、ランダムな方法でユーザーを選択するのではなく、シードに従ってユーザーをランダムに選択するように変更する際に支援が必要です。同じシードで同じ選択を実行すると、同じユーザーが取得されます。
ありがとう、クリント
This is from MSDN that would select number between 0 to 99 and approximately top 10 percent:
SELECT * FROM Table1
WHERE (ABS(CAST(
(BINARY_CHECKSUM(*) *
RAND()) as int)) % 100) < 10
So, if you want 0 to 19 then use 20 instead of 100 for example.
I have not so elegant solution but worth the try like:
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
See my Fiddle Demo
I used user_id
as the seed.
And this one also:
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
See my demo for this one also.
これを試して、10 人のランダムなユーザーを取得します。
SELECT user_id From users WHERE rand()>0.5 limit 10;