Comment demander une seule ligne au hasard à partir d'une base de données de force.com en SOQL?

StackOverflow https://stackoverflow.com/questions/4408814

  •  08-10-2019
  •  | 
  •  

Question

Somme de comptage est dans la plage de lignes 10K-100K. Puis-je utiliser RAND () sur force.com? Malheureusement, bien que toutes les lignes ont un identifiant numérique unique, il y a beaucoup de lacunes, et je voudrais souvent sélectionner une ligne au hasard à partir d'un sous-ensemble filtré de toute façon.

Je soupçonne qu'il n'y a pas de le faire de façon particulièrement efficace, mais est-il possible?

En fin de compte tout ce que je veux faire est d'extraire une ligne d'une table (ou un sous-ensemble en fonction des critères de filtrage spécifiques) au hasard.

Si force.com ne me permet pas de sélectionner une ligne au hasard, alors je peux interroger les lignes à sélectionner et attribuer des ID séquentiels à toutes les lignes, dites 1-1,035, puis sélectionnez un nombre aléatoire dans cette plage localement, par exemple 349, puis obtenir la ligne 349?

Était-ce utile?

La solution

Non, vous ne pouvez pas utiliser ORDER BY RAND() ou quelque chose comme ça. Vous pouvez trier par champ réel (en option avec NULLS LAST etc.). Vous pouvez utiliser LIMIT, GROUP BY et HAVING bien ainsi que MIN, MAX, COUNT ...

Peut-être que si vous écrivez plus sur le but pour lequel vous devez afficher une ligne au hasard ... Sinon, quel est le problème avec ORDER BY LastModifiedDate DESC LIMIT 1? Ou la sélection de 100 lignes et montrant rangée aléatoire avec Math.random ( ) ou Crypto.getRandomInteger () modulo 100?

Autres conseils

Vous pouvez utiliser SOQL OFFSET pour sélectionner un enregistrement aléatoire.

Voici comment vous le faites:

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);

Vous pouvez essayer quelque chose comme ça.

  1. Ajouter une colonne de séquence à partir de 0.
  2. Utilisation Math.random () - qui renvoie un nombre décimal compris entre 0 et 1. multiplier par 100 pour obtenir 1000 r entier

  3. .
  4. SOQL utilisation pour aller chercher cette rangée SELECT Bar__c, Bar_Seq_Col_ c de Foo _c où Bar_Seq_Col__c =: Math.random () * 10

est juste une idée exemple que vous pouvez penser à ces lignes pour voir est-il une idée feasiable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top