SQL: избегайте дубликатов и выполняйте условную «группировку» - PullRequest
0 голосов
/ 05 декабря 2018

На основе следующей схемы данных

Database Schema

Я пытаюсь создать запрос, который возвращает все контактные роли последней возможности всех учетных записейв моей системе.

Однако, если у учетной записи есть 1 возможность с определенным полем (этапом) со значением (финансируется), то вместо этого назначьте приоритет этой возможности, поскольку в некоторых случаях система может иметь возможность сЭтап финансирования, но это не обязательно последняя возможность, созданная для учетной записи.

Так что, если бы я мог представить это в таблице, это выглядело бы так, если бы в финальной таблице было 6 записей, так как первая учетная запись, в которой возможность имеет контакт дважды в ролях (это часто встречается всценарий):

Records from sql

Я создал следующий sql, но это неправильно, он приводит к дублированию записей, и я не знаю, как получитьпоследний и обусловленный этот последний, чтобы быть тем с финансируемой стадией.

SELECT 
    Id,
    OpportunityId,
    OpporutniyName,
    OpporutniyStage,
    FirstName,
    LastName,
    Mobile,
    Useractive,
    Email,
    EmailOptOut,
    AccountName,
    AccOppotunityInProgress,
    AccTotalLoanPaid,
    AccTotalClosedLost,
    TotalOppsLoanFunded,
    AccountID
FROM (
    SELECT 
        con.Id AS [Id], 
        opp.Id AS [OpportunityId], 
        acc.Id AS [AccountID],
        opp.Name AS [OpporutniyName],
        opp.StageName AS [OpporutniyStage],
        con.FirstName AS [FirstName],
        con.LastName AS [LastName],
        con.MobilePhone AS [Mobile],
        con.Useractive__c AS [Useractive],
        con.Email AS [Email],
        con.HasOptedOutOfEmail AS [EmailOptOut],
        acc.Name AS [AccountName],
        acc.Total_Opportunities_in_Progress__c AS [AccOppotunityInProgress],
        acc.Total_Loan_Paid__c AS [AccTotalLoanPaid],
        acc.Total_Closed_Lost__c AS [AccTotalClosedLost],
        opp.Total_Opportunities_Loan_Funded__c AS [TotalOppsLoanFunded],
        row_number() over(partition by opp_con_role.ContactId,opp.Id order by opp.CreatedDate desc) AS RowNum    
    FROM [OpportunityContactRole_Salesforce] opp_con_role
    LEFT JOIN [Opportunity_Salesforce] opp
        ON   opp_con_role.OpportunityId = opp.Id 
    JOIN [Contact_Salesforce] con
        ON   opp_con_role.ContactId = con.Id  
    JOIN [account_Salesforce] acc
        ON   acc.Id = opp.AccountId    
    WHERE con.Email IS NOT NULL OR con.MobilePhone IS NOT NULL 
) sr 
WHERE sr.RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...