これは、ほとんどの「ランダムな順序」の質問とは反対です。データベースからランダムな順序でデータを選択したい。しかし、特定の選択を繰り返して、同じ順序を再度取得できるようにしたいと考えています。
現在の (ランダムな) 選択:
SELECT custId, rand() as random from
(
SELECT DISTINCT custId FROM dummy
)
これを使用して、すべてのキー/行が乱数を取得します。これらの結果を昇順に並べると、ランダムな順序になります。
しかし、この選択を繰り返して、まったく同じ順序を取得したいと思います。私の考えは、乱数 (r) をセッションごとに 1 回 (たとえば "4") 計算し、この数を使用して何らかの方法でデータをシャッフルすることです。
私の最初のアイデア:
SELECT custId, custId * 4 as random from
(
SELECT DISTINCT custId FROM dummy
)
(実際の "4" は 4005226664240702 のようになります)
これにより、行ごとに異なる数になりますが、実行ごとに同じ数になります。「r」を 5 に変更すると、すべての数値が変更されます。
問題は、ここでは乗算が十分でないことです。数を増やすだけですが、順序は同じに保たれます。したがって、他の種類の算術関数が必要です。
より抽象的な
私のデータ(AD)から始めます。kはキーで、rは現在使用されている乱数です。
k r
A = 1 4
B = 2 4
C = 3 4
D = 4 4
すべての行でkとrを使用して計算を行うと、次のような結果が得られます。
k r
A = 1 4 --> 12
B = 2 4 --> 13
C = 3 4 --> 11
D = 4 4 --> 10
数字は何でもかまいませんが、昇順で並べ替えると、最初の順序とは異なる順序が必要になります。この場合、D、C、A、B、E.
r を 7 に設定すると、異なる順序 (C、A、B、D) になります。
k r
A = 1 7 --> 56
B = 2 7 --> 78
C = 3 7 --> 23
D = 4 7 --> 80
r = 7 を使用するたびに、同じ数字 => 同じ順序になるはずです。
k と r で計算を行う数学関数を探しています。RAND() 関数のシードは、サポートしている一部のデータベースではサポートされていないため、適切ではありません
r はすでにランダムに生成された数値であることに注意してください
バックグラウンド
1 つのテーブル - 2 つのデータ コンシューマー。1 つのコンシューマーはテーブルのランダムな 5% を取得し、もう 1 つのコンシューマーは他の 95% を取得します。データを取得するだけでなく、生成された SQL を取得します。そのため、同じデータを 2 回選択してはいけませんが、それでもランダムな 2 つの SQL があります。