2016-06-30 1 views
0

Я новичок в 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

Похоже, что вам нужен коррелированный подзапрос. Включите в него условие o1! – jarlh

+0

Salesforce не использует SQL, если вы не используете WSDL. Вы ищете SOQL, который сильно отличается от SQL – coder32

ответ

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' к внешнему запросу, а также.

+0

Отсутствует и в инструкции where подзапроса – Chris

 Смежные вопросы

  • Нет связанных вопросов^_^