Как запросить одну случайную строку из базы данных force.com в SOQL? - PullRequest
6 голосов
/ 10 декабря 2010

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 24 апреля 2012

Вы можете использовать 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 голос
/ 04 июня 2011

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

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

  3. использовать SOQL для извлечения этой строки SELECT Bar__c, Bar_Seq_Col_ c из Foo _c, где Bar_Seq_Col__c =: Math.random () * 10

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

1 голос
/ 11 декабря 2010

Нет, вы не можете использовать ORDER BY RAND() или что-то в этом роде. Вы можете сортировать по реальному полю (опционально с NULLS LAST и т. Д.). Вы можете использовать LIMIT, GROUP BY & HAVING, а также MIN, MAX, COUNT ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...