我是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)
有没有人对正确的查询或更好的方法有任何想法?
答案 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'
条件添加到外部查询中。