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

Oll*_*e C 6 salesforce force.com soql

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

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

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

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

met*_*ddy 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);
Run Code Online (Sandbox Code Playgroud)

  • OFFSET是否会在"总行数在10k-100k行范围内"的情况下工作?对于大型表,最大偏移量为2,000行可能会出现问题.`rand`的上限可能是2,000.我不认为在没有定义Order By子句的情况下对排序键的更改将足以给出良好的分布. (4认同)

eye*_*eam 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显示随机行?