私はすでにこの投稿をここ (http://stackoverflow.com/questions/1398113/sql-select-one-row-randomly-but-taking-into-account-a-weight) で見ましたが、解決できませんでした。「スタッフ」テーブルはどこに置くのですか? RND() の代わりに NEWID() を使用しないのはなぜですか?
テーブルスタッフ
id item weight location
1 ball 1 Wyoming
2 cup 2 Alaska
3 sock 1 Idaho
4 car 3 Miami
5 hot girl 5 Brazil
上記の記事によると、私はこれを行うことになっています
SELECT TOP 1 t.*
FROM @Table t
INNER JOIN (SELECT t.id, sum(tt.weight) AS cum_weight
FROM @Table t
INNER JOIN @Table tt ON tt.id <= t.id
GROUP BY t.id) tc
ON tc.id = t.id,
(SELECT SUM(weight) AS total_weight FROM @Table) tt,
(SELECT RAND() AS rnd) r
WHERE r.rnd * tt.total_weight <= tc.cum_weight
ORDER BY t.id ASC
上記のことをしたいのですが、この方法で:
SELECT TOP (1) from stuff WHERE blahblahblah AND (location='Brazil' OR location='Wyoming' OR location='Brazil') AND (weight <= cum_weight) ORDER BY NEWID()
私は NEWID() を使用できると推測しているだけで、RND() を使用する必要はありません