根据日期和用户获取名称

时间:2016-06-30 14:12:02

标签: sql salesforce soql

我是SQL新手(在Salesforce中),我在查询时遇到了一些问题。我想为每个用户获取最后一件商品的客户。 (“约翰的最后一笔交易是给顾客简”)。

我们围绕Opportunity对象构建了所有内容。如果机会对象被分级为“已关闭赢”,则将其视为卖出。 因此,我的方法是为每个卖家找到具有“最高”日期的对象,该对象被分级为“已关闭赢”。之后,我发现对象的客户与我找到的日期相关联。但是,它不起作用。

SELECT o1.CustomerName 
FROM Opportunity o1 
WHERE o1.CloseDate IN(
 SELECT MAX(o2.CloseDate) 
 FROM Opportunity o2 
 WHERE o2.StageName = 'Closed Won' 
 GROUP BY o2.UserId)

内部查询本身生成一个列表,其中包含准确的最后关闭日期'为每个用户。 我所拥有的表格大大简化了:

Opportunity(CustomerName, StageName, CloseDate, UserId)

User(UserId, UserName)

有没有人对正确的查询或更好的方法有任何想法?

1 个答案:

答案 0 :(得分:0)

您实际上想要一个相关的子查询。问题是日期与用户无关,因此您将获得用户的所有记录,其中日期是任何用户的最长日期。

这是另一种方法:

SELECT o1.CustomerName 
FROM Opportunity o1 
WHERE o1.CloseDate IN (SELECT MAX(o2.CloseDate) 
                       FROM Opportunity o2 
                       WHERE o2.StageName = 'Closed Won' 
                             o1.UserId = o2.UserId
                      );

您可能还想将StageName = 'Closed Won'条件添加到外部查询中。