如何用SOQL查询自定义对象中每个客户的最新记录?
实现每个客户对应的最新自定义对象记录的SOQL查询
你的原SQL逻辑存在问题:子查询里用mco1.id = mco2.id关联,本质上只是匹配每条记录自身的创建日期,根本筛选不出每个客户的最新记录。下面提供两种可行的SOQL解决方案:
方法一:分组子查询匹配
先按客户分组获取每个客户的最新创建日期,再匹配主表中对应客户且创建日期等于该最大值的记录:
SELECT Id, Score__c, Client__c, Date__c, CreatedDate FROM my_custom_object__c WHERE (Client__c, CreatedDate) IN ( SELECT Client__c, MAX(CreatedDate) FROM my_custom_object__c GROUP BY Client__c )
注:如果同一客户在同一时间有多条记录,这种方法会返回所有符合条件的记录
方法二:窗口函数筛选
利用SOQL支持的窗口函数,给每个客户的记录按创建日期倒序编号,取编号为1的记录(即最新一条):
SELECT Id, Score__c, Client__c, Date__c, CreatedDate FROM ( SELECT Id, Score__c, Client__c, Date__c, CreatedDate, ROW_NUMBER() OVER(PARTITION BY Client__c ORDER BY CreatedDate DESC) AS rn FROM my_custom_object__c ) WHERE rn = 1
如果需要保留同一客户同一时间的所有最新记录,可以把ROW_NUMBER()换成RANK()
内容的提问来源于stack exchange,提问作者Kees
相关产品推荐
相关产品推荐

