如何在SOQL中从force.com数据库请求单个随机行?

时间:2010-12-10 12:28:15

标签: salesforce soql force.com

总行数在10k-100k行范围内。我可以在force.com上使用RAND()吗?不幸的是,尽管所有行都有唯一的数字标识符,但仍有许多空白,我常常想从过滤后的子集中选择一个随机行。

我怀疑没有特别有效的方法来做到这一点,但它有可能吗?

最终我想做的就是随机抽取表格中的一行(或基于特定过滤条件的子集)。

如果force.com不允许我选择随机行,那么我可以查询要从中选择的行,并为所有行分配顺序ID,例如1-1,035,然后选择该范围内的随机数在本地,比如349,然后得到第349行?

3 个答案:

答案 0 :(得分:13)

您可以使用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 :(得分:1)

不,你不能使用ORDER BY RAND()或类似的东西。您可以按真实字段排序(可选择NULLS LAST等)。你可以使用LIMIT,GROUP BY&尽管如此,还有MIN,MAX,COUNT ......

也许如果你写了更多关于你需要显示随机行的目的......否则ORDER BY LastModifiedDate DESC LIMIT 1出了什么问题?或者选择100行并显示Math.random() or Crypto.getRandomInteger()模100的随机行?

答案 2 :(得分:1)

你可以尝试这样的事情。

  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

  4. 这只是一个示例性的想法,你可以想到这些线,看它是一个可行的想法。

相关问题