6

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

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

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

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

4

3 回答 3

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);
于 2012-04-24T16:26:50.347 回答
1

不,你不能使用ORDER BY RAND()或类似的东西。您可以按实际字段排序(可选NULLS LAST等)。您可以使用 LIMIT、GROUP BY 和 HAVING 以及 MIN、MAX、COUNT...

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

于 2010-12-10T21:22:34.523 回答
1

你可以试试这样的。

  1. 添加一个从 0 开始的序列列。
  2. 使用 Math.random() - 这将返回一个介于 0 到 1 之间的小数。将其乘以 100 r 1000 以获得整数。

  3. 使用 SOQL 获取该行 SELECT Bar__c, Bar_Seq_Col_ c from Foo _c where Bar_Seq_Col__c = :Math.random() * 10

这只是一个示例想法,您可以考虑这些行来查看它是否可行。

于 2011-06-04T15:15:11.430 回答