Несколько подзапросов T-SQL с JOIN и MAX (дата) - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть этот запрос с 2 LEFT JOINS каждый с подзапросом.

Подзапросам следует выбрать строку с самой поздней датой PointsChangeDate__c для конкретной кампании, например: PointsTypeCode__c = '1'.

Проблема в том, что он выбирает случайные даты.

Если я запускаю только одну JOIN / sub-query, результат верен, но когда я добавляю2-ой JOIN / sub-query, тогда результаты неверны, и кажется, что тянут случайные даты.

Я подозреваю, что моя проблема связана с типом JOIN, который я использую, но я не могу понять, почему, потому чтоесли я LEFT JOIN, то я включаю все результаты (a._ContactKey), извлеченные из первого запроса, и выполняю их до конца.

SELECT 
    a._ContactKey ContactId,
    a.Full_Name_1__c Full_Name,
    a.MC_Phone__c Mobile,
    a.POSCustomerNumber__c POS_Customer_Number,
    a.POSCustomerStatus__c POSCustomerStatus,
    'IL' Locale,
    a.Mobile_1__c Mobile_for_text,
    g.TotalPoints__c TotalPoints_SourceMethod_1,
    g.ValidUntil__c ValidUntil_SourceMethod_1,
    g.date_1 PointsChangeDate__c_1,
    h.TotalPoints__c TotalPoints_SourceMethod_2,
    h.ValidUntil__c ValidUntil_SourceMethod_2,
    h.date_2 PointsChangeDate__c_2

FROM
    Contact_Salesforce AS a
       LEFT JOIN
    (SELECT 
        Contact__c,
            TotalPoints__c,
            ValidUntil__c,
           MAX(PointsChangeDate__c) date_1
    FROM
        Member_points__c_Salesforce 
    WHERE
        PointsTypeCode__c = '1' 

    GROUP BY Contact__c , TotalPoints__c , ValidUntil__c, PointsChangeDate__c) AS g ON a._ContactKey = g.Contact__c 

     LEFT JOIN
        (SELECT Contact__c,
            TotalPoints__c,
            ValidUntil__c,
           MAX(PointsChangeDate__c) date_2
    FROM
        Member_points__c_Salesforce 
    WHERE
        PointsTypeCode__c = '2' 
    GROUP BY Contact__c , TotalPoints__c , ValidUntil__c, PointsChangeDate__c) AS h ON h.Contact__c = g.Contact__c


        LEFT JOIN
    SMS_Unsubscribe AS c ON REPLACE(CONCAT('972',
                RIGHT(RTRIM(LTRIM(a.Mobile_1__c)), 9)),
        '-',
        '') = c.Mobile
        LEFT JOIN
    Member_Segments__c_Salesforce AS b ON b.Contact__c = a._ContactKey
 WHERE
   a.Mobile_1__c IS NOT NULL
        AND c.Mobile IS NULL
        AND a.POSCustomerStatus__c = '0'
        AND b.IsActive__c = 'true'
GROUP BY a._ContactKey , a.Full_Name_1__c , a.MC_Phone__c , a.POSCustomerNumber__c , a.POSCustomerStatus__c , Locale , a.Mobile_1__c , a.Mobile_1__c , b.SegmentTypeID__c, b.SegmentTypeDescription__c , b.ToDate__c  , g.TotalPoints__c , g.ValidUntil__c, g.date_1
,h.TotalPoints__c , h.ValidUntil__c, h.date_2

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...