Wie kann ich aus einer force.com Datenbank in SOQL eine einzelne zufällige Reihe anfordern?

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

  •  08-10-2019
  •  | 
  •  

Frage

Insgesamt Zeilenanzahl im Bereich 10k-100k Zeilen. Kann ich RAND () auf force.com verwenden? Leider obwohl alle Zeilen eine eindeutige numerische Kennung haben, gibt es viele Lücken, und ich würde oft ohnehin eine zufällige Zeile aus einer gefilterten Teilmenge auswählen möge.

Ich vermute, es gibt keine besonders effiziente Art und Weise, dies zu tun, aber es ist möglich?

Schließlich ist was ich tun will alle eine Zeile aus einer Tabelle zu extrahieren (oder eine Untergruppe basierend auf bestimmten Filterkriterien) in zufälliger Reihenfolge.

Wenn force.com mich nicht eine zufällige Reihe lassen auswählen, kann dann abfragen ich die Zeilen aus auszuwählen, und assign sequenzielle IDs für alle Zeilen, sagt 1-1,035, und dann eine Zufallszahl in diesem Bereich wählt lokal, sagen 349, und dann Zeile 349?

erhalten
War es hilfreich?

Lösung

Nein, Sie können nicht ORDER BY RAND() oder etwas ähnliches verwenden. Sie können in Echt Feld sortieren (optional mit NULLS LAST etc.). Sie könnten LIMIT, GROUP BY und HAVING obwohl sowie MIN, MAX, COUNT ...

verwenden

Vielleicht, wenn Sie mehr über den Zweck schreiben würde, für die Sie eine beliebige Zeile angezeigt werden ... Ansonsten, was ist los mit ORDER BY LastModifiedDate DESC LIMIT 1? Oder Auswählen von 100 Zeilen und zeigt zufällige Reihe mit Math.random ( ) oder Crypto.getRandomInteger () Modulo 100?

Andere Tipps

Sie können mit SOQL OFFSET wählen eine zufällige Datensatz.

Hier ist, wie Sie es tun:

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

Sie könnte so etwas wie dies versuchen.

  1. eine Sequenz Spalte hinzufügen von 0
  2. Start
  3. Verwenden (Math.random) - das wird wieder eine Dezimalzahl im Bereich zwischen 0 bis 1. Multiplizieren Sie das mit 100 r 1000 zu erhalten integer

  4. .
  5. Verwendung SOQL diese Zeile zu holen SELECT Bar__c, Bar_Seq_Col_ c von Foo _c wo Bar_Seq_Col__c =: Math.random () * 10

Dies ist nur ein Beispiel Idee, die Sie diese Zeilen denken können, um zu sehen, ist es eine feasiable Idee.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top