总行数在10k-100k行范围内。我可以在force.com上使用RAND()吗?不幸的是,尽管所有行都有唯一的数字标识符,但仍有许多空白,我常常想从过滤后的子集中选择一个随机行。
我怀疑没有特别有效的方法来做到这一点,但它有可能吗?
最终我想做的就是随机抽取表格中的一行(或基于特定过滤条件的子集)。
如果force.com不允许我选择随机行,那么我可以查询要从中选择的行,并为所有行分配顺序ID,例如1-1,035,然后选择该范围内的随机数在本地,比如349,然后得到第349行?
答案 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)
你可以尝试这样的事情。
使用 Math.random() - 返回0到1之间的小数。乘以100 r 1000得到整数。
使用SOQL获取该行 SELECT Bar__c,Bar_Seq_Col_ c来自Foo _c,其中Bar_Seq_Col__c =:Math.random()* 10
这只是一个示例性的想法,你可以想到这些线,看它是一个可行的想法。