Я написал sql, чтобы получить последнюю запись, основанную на версии. Он вытягивает последнюю запись, но я должен убедиться, что он вытягивает последнюю запись каждого типа. Тип определяется AgreementId. Как вы можете видеть на снимке ниже, есть две записи с разными идентификаторами соглашения. Я пытаюсь использовать связи, но это не похоже на работу. Что я делаю не так
Это текущие записи
Приведенный ниже запрос получает только одну запись, которая является последним соглашением от две записи. В идеале он должен возвращать оба, поскольку они являются двумя типами соглашения. Я использую WITH TIES, но это не похоже на то, что я хочу
SELECT TOP (1) WITH TIES ua.ID AS UserAgreementID ,
A.ID AS AgreementID ,
A.Code ,
A.ComplianceCode ,
A.Name ,
A.Description ,
A.Version ,
ua.UserAgreementStateID ,
uas.Name AS UserAgreementStateName ,
ua.AcceptanceWindowExpiry ,
declaration.GetDifferenceInDaysOrHours(ua.AcceptanceWindowExpiry) AS TimeLeft ,
A.Data ,
pa.ID AS AuthoredByID ,
pa.FirstName + ' ' + pa.LastName AS AuthoredByName ,
A.Authored ,
ia.ID AS IssuedByID ,
ia.FirstName + ' ' + pa.LastName AS IssuedByName ,
A.Issued
FROM declaration.Agreement AS A
INNER JOIN declaration.UserAgreement AS ua ON A.ID = ua.AgreementID
INNER JOIN declaration.UserAgreementState AS uas ON ua.UserAgreementStateID = uas.ID
LEFT JOIN common.Person AS pa ON A.AuthoredBy = pa.ID
LEFT JOIN common.Person AS ia ON A.IssuedBy = ia.ID WHERE ua.UserID = 607
AND uas.Code IN ('ISS',
'DEF','EXP')-- Issued, Deferred
AND A.Draft = CONVERT(BIT, 0) -- Not a draft.
AND A.Deleted = CONVERT(BIT, 0) -- Not deleted.
AND (A.Issued <= GETUTCDATE()
OR A.Issued IS NULL)
AND (A.Expires > GETUTCDATE()
OR A.Expires IS NULL)
ORDER BY A.Version DESC