Pregunta

Total fila de conteo está en el rango 10k-100k filas. ¿Puedo utilizar RAND () en force.com? Por desgracia, a pesar de todas las filas tienen un identificador numérico único, hay muchas lagunas, y muchas veces me gustaría para seleccionar una fila al azar de un subconjunto filtrado de todos modos.

Sospecho que hay manera de no particularmente eficiente para hacer esto, pero ¿es posible?

En última instancia todo lo que quiero hacer es extraer una fila de una tabla (o un subconjunto basado en criterios de filtro específico) al azar.

Si force.com no me deja seleccionar una fila al azar, entonces puedo consultar las filas para seleccionar, y ID secuenciales asignar a todas las filas, por ejemplo 1-1,035, y luego seleccione un número aleatorio en ese rango a nivel local, por ejemplo 349, y luego fila 349?

¿Fue útil?

Solución

No, no se puede utilizar ORDER BY RAND() o algo por el estilo. Se puede ordenar por campo real (opcionalmente con NULLS LAST etc.). Se podría limitar el uso, GROUP BY y HAVING embargo, así como MIN, MAX, COUNT ...

Tal vez si iba a escribir más acerca de la finalidad para la que se necesita mostrar una fila al azar ... De lo contrario lo que está mal con ORDER BY LastModifiedDate DESC LIMIT 1? O la selección de 100 filas y mostrando fila al azar con Math.random ( ) o Crypto.getRandomInteger () modulo 100?

Otros consejos

Se puede usar SOQL OFFSET para seleccionar un registro aleatorio.

Así es como se hace:

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

Se podría intentar algo como esto.

  1. Añadir una columna de secuencia empezando por 0.
  2. Uso Math.random () - que devolverá un decimal que oscila entre 0 a 1. que se multiplican por 100 r 1000 para obtener entero

  3. .
  4. SOQL uso para ir a buscar esa fila SELECT Bar__c, Bar_Seq_Col_ c de Foo _c donde Bar_Seq_Col__c =: Math.random () * 10

esto es sólo una idea de la muestra se puede pensar en estas líneas para ver que es una idea feasiable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top