SOQLのForce.comデータベースから1つのランダムな行をリクエストするにはどうすればよいですか?
-
08-10-2019 - |
質問
総行の範囲は10k-100kの範囲です。 force.comでrand()を使用できますか?残念ながら、すべての行には一意の数値識別子がありますが、多くのギャップがあり、とにかくフィルタリングされたサブセットからランダムな行を選択したいと思うことがよくあります。
これを行うための特に効率的な方法はないと思いますが、まったく可能ですか?
最終的に、私がやりたいのは、ランダムにテーブル(または特定のフィルター基準に基づいたサブセット)から1つの行を抽出することです。
Force.comがランダムな行を選択させない場合は、選択する行を照会して、すべての行にシーケンシャルIDを割り当て、1〜1,035として、その範囲のランダム数をローカルで選択することはできます。 349、そして行349を取得しますか?
解決
いいえ、使用できません ORDER BY RAND()
またはそのようなもの。実際のフィールドでソートできます(オプションで NULLS LAST
等。)。制限、グループ&を使用することもできますが、最小、最大、カウント...
たぶん、あなたがランダムな行を表示する必要がある目的についてもっと書くなら...そうでなければ何が悪いのか ORDER BY LastModifiedDate DESC LIMIT 1
?または、100行を選択してランダムな行を表示します Math.random()またはcrypto.getRandominteger() Modulo 100?
他のヒント
使用できます SOQLオフセット ランダムレコードを選択します。
これがあなたのやり方です:
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);
このようなことを試すことができます。
- 0から始まるシーケンス列を追加します。
Math.random()を使用します。これは、0〜1の範囲の小数を返します。これを100 r 1000に掛けて整数を取得します。
soqlを使用してその行を選択しますbar__c、bar_seq_col_cからc_cここでbar_seq_col__c =:math.random() * 10
これは、これらの行を考えることができるサンプルのアイデアです。