На основе следующей схемы данных
Я пытаюсь создать запрос, который возвращает все контактные роли последней возможности всех учетных записейв моей системе.
Однако, если у учетной записи есть 1 возможность с определенным полем (этапом) со значением (финансируется), то вместо этого назначьте приоритет этой возможности, поскольку в некоторых случаях система может иметь возможность сЭтап финансирования, но это не обязательно последняя возможность, созданная для учетной записи.
Так что, если бы я мог представить это в таблице, это выглядело бы так, если бы в финальной таблице было 6 записей, так как первая учетная запись, в которой возможность имеет контакт дважды в ролях (это часто встречается всценарий):
Я создал следующий 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