如何从SOQL中的force.com数据库请求单个随机行?
-
08-10-2019 - |
题
总排计数在10K-100K行范围内。我可以在force.com上使用rand()吗?不幸的是,尽管所有行都有一个唯一的数字标识符,但存在许多差距,而且我经常想从过滤的子集中选择一个随机行。
我怀疑没有特别有效的方法可以做到这一点,但是根本不可能吗?
最终,我要做的就是随机从表(或基于特定过滤器标准的子集)提取一行。
如果Force.com不允许我选择一个随机行,那么我可以查询要选择的行,然后将顺序ID分配给所有行,例如1-1,035,然后在本地选择一个随机数,例如349,然后获得349行?
解决方案
不,你不能使用 ORDER BY RAND()
或类似的东西。您可以按真实字段进行排序(可选 NULLS LAST
ETC。)。您可以使用限制,by and and and and Min,max,count ...
也许如果您要写更多有关您需要显示随机行的目的...否则出了什么问题 ORDER BY LastModifiedDate DESC LIMIT 1
?或选择100行并显示随机行 Math.random()或crypto.getRandomInteger() Modulo 100?
其他提示
您可以使用 SOQL偏移 选择随机记录。
这是您的工作方式:
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);
您可以尝试这样的事情。
- 从0开始添加序列列。
使用Math.random() - 将返回0到1之间的小数范围。将其乘以100 r 1000以获取整数。
使用SOQL获取该行选择bar__c,bar_seq_col_C来自foo_c其中bar_seq_col__c =:math.random() * 10
这只是一个示例想法,您可以想到这些行是一个可行的想法。
不隶属于 StackOverflow