2016-06-30 9 views
0

私はSalesforceでSQLを初めて使用しています。クエリにいくつか問題があります。私は各ユーザーのために、最後に販売されたアイテムの顧客を取得したい。 (「ジョンの最後の売却は顧客のジェーンにあった」)。日付とユーザーに基づいて名前を取得する

私たちは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

WSDLを使用していない限り、SalesforceはSQLを使用しません。 SQLとは大きく異なるSOQLを探していますか – 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

関連する問題