У меня следующий запрос: для каждого FacilityCode
я получаю LastCompletedOn
и LastEDAOn
.
SELECT Code ,
MAX(DATEADD(HOUR, Seed_TimeZone.DifferenceFromUTC, CompletedOn)) 'LastCompletedOn' ,
MAX(DATEADD(HOUR, Seed_TimeZone.DifferenceFromUTC,LastUpdateDemographicsDate)) 'LastEDAOn'
FROM PatientCharts WITH ( NOLOCK )
INNER JOIN Facilities WITH ( NOLOCK ) ON Facilities.FacilityId = PatientCharts.FacilityId
INNER JOIN Seed_TimeZone WITH ( NOLOCK ) ON Seed_TimeZone.TimeZoneId = Facilities.TimeZoneId
WHERE Facilities.IsActive = 1
AND PatientCharts.IsDeleted = 0
AND PatientCharts.IsErroneous = 0
--AND dbo.PatientCharts.ChartStatusID=1
GROUP BY Code
Я хочу поместить закомментированное условие "AND dbo.PatientCharts.ChartStatusID = 1" в LastCompletedOn
.Я попытался поместить весь запрос как подзапрос, но одно и то же значение повторяется для каждого кода объекта.Как это сделать.
ОТВЕТ
Ответ, предложенный srgerg, работает нормально.Однако мы можем получить тот же результат, используя дополнительное соединение
SELECT Code ,
MAX(DATEADD(HOUR, DifferenceFromUTC, compOn.CompletedOn)) 'LastCompletedOn' ,
MAX(DATEADD(HOUR, DifferenceFromUTC,Prim.LastUpdateDemographicsDate)) 'LastEDAOn'
FROM PatientCharts AS Prim WITH ( NOLOCK )
INNER JOIN Facilities WITH ( NOLOCK ) ON Facilities.FacilityId = Prim.FacilityId
INNER JOIN Seed_TimeZone LEO WITH ( NOLOCK ) ON LEO.TimeZoneId =
Facilities.TimeZoneId
LEFT OUTER JOIN PatientCharts compOn ON compOn.PatientChartId = prim.PatientChartId AND compOn.ChartStatusID=1
WHERE Facilities.IsActive = 1
AND Prim.IsDeleted = 0
AND Prim.IsErroneous = 0
GROUP BY Code