6

合計行数は 10k ~ 100k 行の範囲です。force.com で RAND() を使用できますか? 残念ながら、すべての行には一意の数値識別子がありますが、多くのギャップがあり、フィルタリングされたサブセットからランダムな行を選択したいことがよくあります。

これを行うための特に効率的な方法はないと思いますが、それはまったく可能ですか?

最終的にやりたいことは、テーブル (または特定のフィルター基準に基づくサブセット) からランダムに 1 行を抽出することだけです。

force.com でランダムな行を選択できない場合は、行をクエリして選択し、すべての行に連続した ID (1 ~ 1,035 など) を割り当ててから、その範囲内の乱数をローカルで選択できます。 349、そして行 349 を取得しますか?

4

3 に答える 3

13

SOQL OFFSETを使用して、ランダムなレコードを選択できます。

方法は次のとおりです。

Integer count = [SELECT COUNT() FROM Account];
Integer rand = Math.floor(Math.random() * count).intValue();
Account a = [SELECT Name FROM Account LIMIT 1 OFFSET :rand];
System.debug(a.name);
于 2012-04-24T16:26:50.347 に答える
1

このようなことを試すことができます。

  1. 0 から始まるシーケンス列を追加します。
  2. Math.random() を使用します。これは、0 から 1 の範囲の 10 進数を返します。100 r 1000 を掛けて整数を取得します。

  3. SOQL を使用してその行をフェッチします SELECT Bar__c, Bar_Seq_Col_ c from Foo _c where Bar_Seq_Col__c = :Math.random() * 10

これは、実行可能なアイデアであるかどうかを確認するために、これらの行について考えることができる単なるアイデアの例です。

于 2011-06-04T15:15:11.430 に答える
1

いいえ、使用できませんORDER BY RAND()。実際のフィールドで並べ替えることができます (オプションでNULLS LASTetc を使用)。MIN、MAX、COUNTだけでなく、LIMIT、GROUP BY、HAVINGも使用できます...

たぶん、ランダムな行を表示する必要がある目的についてもっと書くとしたら...そうでなければ、何が問題なのORDER BY LastModifiedDate DESC LIMIT 1ですか? または、100 行を選択し、 Math.random() または Crypto.getRandomInteger() modulo 100でランダムな行を表示しますか?

于 2010-12-10T21:22:34.523 に答える