SQL объединение результатов с самым последним полем (MAX ID или самой последней датой), результатом первого запроса - PullRequest
0 голосов
/ 17 марта 2020

У меня проблема с нужными результатами / следующий SQL запрос:

SELECT PersDev.PersDevId As PersDevId,
    ISNULL(MainDatabase.dbo.PersDev.UserId, '') As UserId,
    ISNULL(PersDev.TypeId, '') As TypeId,
    ISNULL(PersDev.CreatedDate, '') As CreatedDate,
    ISNULL(PersDev.CreatedUserId, '') As CreatedUserId,
    ISNULL(PersDev.DevArea, '') As DevArea,
    ISNULL(PersDev.TaggedUsers, '') As TaggedUsers,
    ISNULL(PersDev.LastUpdatedDate, '') As LastUpdatedDate,
    ISNULL(PersDev.LastUpdatedUserId, '') As LastUpdatedUserId,
    ISNULL(PersDev.PercentageComplete, '') As PercentComplete,
    ISNULL(PersDev.StatId, '') As StatId,
    ISNULL(PersDev.OwnerLastUpdatedDate, '') AS OwnerLastUpdatedDate,
    ISNULL(PersDevStat.DevStat, '') As PersDevStat,
    ISNULL(PersDevType.DevType , '') As PersDevType,
    RTRIM(LTRIM(ISNULL(a.User_EmailAddress, ''))) AS OwnerEmailAddress,
    LTRIM(RTRIM(ISNULL(b.User_EmailAddress, ''))) AS ManagerEmailAddress,
    LTRIM(RTRIM(ISNULL(Users.FullName, ''))) AS PersDevOwnerName, 
    MAX(ISNULL(PersDevProgUpdate.ProgUpdateId, '')) As PersDevMostRecProgUpdateId,
    --ISNULL(PersDevProgUpdate.ProgUpdate, '') AS PersDevMostRecProgUpdate

FROM PersDev
    LEFT JOIN PersDevType ON PersDevType.TypeId = PersDev.TypeId
    LEFT JOIN PersDevStat ON PersDevStat.StatId = PersDev.StatId
    LEFT JOIN PersDevComment ON PersDevComment.PersDevId = PersDev.PersDevId
    LEFT JOIN PersDevProgUpdate ON PersDevProgUpdate.PersDevId = PersDev.PersDevId
    LEFT JOIN PersDevProgUpdate c ON c.ProgUpdateId = PersDev.PersDevId


    LEFT JOIN Users on Users.UserId = PersDev.UserId
    LEFT JOIN DATABASE2.dbo.Users a on Users.DATABASE2UserID = a.User_UserId
    LEFT JOIN DATABASE2.dbo.Users b ON b.User_UserId = a.user_c_wbsmanager
WHERE PersDev.Deleted IS NULL AND PersDev.StatId = 1
GROUP BY PersDev.PersDevId , PersDev.UserId, PersDev.TypeId, PersDev.CreatedDate, PersDev.CreatedUserId, PersDev.DevArea, PersDev.TaggedUsers, PersDev.LastUpdatedDate, PersDev.LastUpdatedUserId, PersDev.PercentageComplete,  PersDev.StatId, PersDev.OwnerLastUpdatedDate, PersDevStat.DevStat, PersDevType.DevType, Users.FullName, a.User_EmailAddress, b.User_EmailAddress, PersDevProgUpdate.ProgUpdate
Order By PersDev.UserId

В настоящее время запрос выводит меня в отдельные записи PersDev с Highest PersDevProgUpdate.ProgUpdateId для этой записи, используя Макс функция.

Однако мне нужно, чтобы PersDevProgUpdate.ProgUpdate (текстовое поле, а не целочисленный идентификатор) объединялся с каждым результатом, где возвращаемый наивысший идентификатор - это идентификатор записи, в которой находится это обязательное поле. (Я мог бы использовать PersDevProgUpdate.CreatedDateField в качестве самого последнего маркера, если требуется).

Когда я раскомментирую закомментированную строку в приведенном выше коде, он возвращает все результаты, поэтому записи PersDev больше не различаются (несколько записи того же PersDevId, больше не просто MAX PersDevProgUpdate.ProgUpdateID для этой записи PersDev - все они возвращены) присоединяется, и даже переменные, когда я пришел в отчаяние! Я думаю, мне нужно найти MAX ID и использовать его, чтобы соединить необходимое поле с результатами. Кто-нибудь поможет?

Заранее спасибо ?

...