Как я могу запросить один случайную строку из базы данных Force.com в SOQL?

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

  •  08-10-2019
  •  | 
  •  

Вопрос

Общая сумма строки находится в диапазоне 10K-100K рядов. Могу ли я использовать Rand () на Force.com? К сожалению, хотя все строки имеют уникальный числовой идентификатор, есть много пробелов, и я часто хочу выбрать случайную строку из фильтрованного подмножества в любом случае.

Я подозреваю, что нет особенно эффективного способа сделать это, но все это возможно?

В конечном итоге все, что я хочу сделать, это извлечь одну строку из таблицы (или подмножества на основе определенных критериев фильтра) на случайном порядке.

Если Force.com не позволяет мне выбрать случайную строку, то можно ли запросить строки, чтобы выбрать из и назначить последовательные идентификаторы для всех строк, скажем, 1-1,035, а затем выберите случайное число в этом диапазоне локально, скажем, 349, а затем получите ряд 349?

Это было полезно?

Решение

Нет, вы не можете использовать ORDER BY RAND() или что-то подобное. Вы можете отсортировать по настоящему полю (необязательно с NULLS LAST так далее.). Вы можете использовать лимит, группу по и имеющим, а также мин, максимум, счет ...

Может быть, если вы будете писать больше о целях, для которой вам нужно отобразить случайную строку ... в противном случае что не так с ORDER BY LastModifiedDate DESC LIMIT 1? Или выбрать 100 строк и показывая случайную строку с Math.random () или crypto.getrandominteger () Модуло 100?

Другие советы

Вы можете использовать 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);

Вы можете попробовать что-то вроде этого.

  1. Добавьте колонку последовательности, начиная с 0.
  2. Используйте Math.random () - который вернет десятичную ранжи от 0 до 1. Умножьте, что на 100 r 1000, чтобы получить целое число.

  3. Используйте SOQL, чтобы получить эту строку Выберите BAR__C, BAR_SEQ_COL_с из foo._C где bar_seq_col__c =: math.random () * 10

Это всего лишь примера идеи, которую вы можете подумать об этих линиях, чтобы увидеть, это все возможная идея.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top