2011-04-11 6 views
0

X 환자의 X 날짜에 가장 최근 시간을 반환해야하는 복잡한 가입 절차가 있습니다. 가장 최근 시간으로 돌아 가기

SELECT CONVERT(varchar(36), apt.UniqueID), 
     apt.atime, 
     RTRIM(apt.apwork) + ' ' + RTRIM(apt.apwrk2), 
     aps.apsdispchar, 
     RTRIM(LTRIM(aps.apstextcolor)), 
     RTRIM(LTRIM(aps.apsbgcolor)), 
     apT.apid, 
     dbo.MakeCaseString(pat.pfname, pat.pfnamcase) + ' ' + dbo.MakeCaseString(pat.plname, pat.plnamcase), 
     apn.apnentrytime 
     FROM apt INNER JOIN pat ON pat.pid = apt.apid INNER JOIN aps on ((apt.aconfstat IS NOT NULL AND apt.aconfstat = aps.apsid) OR (apt.aconfstat IS NULL AND aps.apsid = ' ')) INNER JOIN apn ON (apn.apnpid = apt.apid AND apn.apndate = apt.adate AND apn.apntime = apt.atime) 
WHERE apt.adid = @ProviderIDParam AND apt.adate = @DateParam AND apn.apnentrytime IN (SELECT MAX(apn.apnentrytime) FROM apn) 
ORDER BY apt.atime ASC 

현재 내가 사용

:

apn.apnentrytime IN (SELECT MAX(apn.apnentrytime) FROM apn) 

다른 데이터 (즉, 상당히 큰의) 동안 그것은, 어떤 데이터를 작동 실 거예요 작동합니다.

+0

dbms는 무엇입니까? –

+0

Microsoft SQL Server Management 2008. –

+0

RTRIM, LTRIM 등에 대해 질문하지 않으면 질문의 핵심 부분까지 줄여야합니다. 나는 어떤 그룹화가 필요하다고 생각하지만 물론 pfnamcase가 무엇인지 이해하는데 몇 시간을 보내고 싶지는 않습니다. –

답변

2

하위 쿼리를 환자 ID의 외부 쿼리에 연결해야합니다 (pat.pid라고 가정합니다).

Select Cast(apt.UniqueID As varchar(36)) 
    , apt.atime 
    , RTRIM(apt.apwork) + ' ' + RTRIM(apt.apwrk2) 
    , aps.apsdispchar 
    , RTRIM(LTRIM(aps.apstextcolor)) 
    , RTRIM(LTRIM(aps.apsbgcolor)) 
    , apT.apid 
    , dbo.MakeCaseString(pat.pfname, pat.pfnamcase) + ' ' + dbo.MakeCaseString(pat.plname, pat.plnamcase) 
    , apn.apnentrytime 
From apt 
    Inner Join pat 
     ON pat.pid = apt.apid 
    Inner Join aps 
     On ((apt.aconfstat Is Not Null And apt.aconfstat = aps.apsid) 
      Or (apt.aconfstat IS NULL And aps.apsid = ' ')) 
    Inner Join apn 
     On (apn.apnpid = apt.apid 
      And apn.apndate = apt.adate 
      And apn.apntime = apt.atime) 
Where apt.adid = @ProviderIDParam 
    And apt.adate = @DateParam 
    And apn.apnentrytime IN ( 
          Select Max(APN1.apnentrytime) 
          From apn As APN1 
           Join apt As APT1 
            On APT1.apid = APN1.apnpid 
             And APT1.adate = APN1.apndate 
             And APT1.atime = APN1.apntime 
          Where APT1.apid = pat.pid 
          ) 
Order By apt.atime ASC 
+0

감사하지만이 오류가 발생합니다. 집계는 HAVING 절 또는 선택 목록에 포함 된 하위 쿼리에 있고 집계되는 열이 외부 참조가 아닌 한 WHERE 절에 나타나지 않을 수 있습니다. –

+0

@ 웨슬리 패티슨 - 내가 고쳤던 하위 쿼리에 오타가있었습니다. 잘못된 테이블 별칭을 참조했습니다. – Thomas

+0

+1 - 제 전화도 잘 걸립니다. – JNK