2014-09-06 4 views
-1

병원 청구 데이터를보고 있으며 동일한 입학 날짜가있는 여러 행이 있습니다. 나는 환자 당 단 하나의 입학 날짜 만 원한다. 입학 날짜가 동일한 행이 여러 개인 경우 LOS가 가장 큰 행을 선택하거나 LOS가 동일한 경우 가장 오래된 입학 날짜가있는 행을 선택하고 싶습니다. 내가 원하는 것 SQL : 가장 낮은 값 행 선택

ID  ADMIT  DC  LOS CLMID 
--  -----  --  --- ----- 
1  1-1-07 1-1-07 0 XXX 
1  1-2-07 1-2-07 0 XXX 
2  1-5-07 1-10-07 5 YYY 
3  2-8-07 2-8-07 0 ZZZ 
3  2-8-07 2-12-07 4 ZZZ 
3  2-8-07 2-10-07 2 ZZZ 

선택하기 : 예를 들어, 다음과 같은 데이터 주어진 나는 MIN의 aggregrate 기능을 사용하려고했습니다

ID  ADMIT  DC  LOS CLMID 
--  -----  --  --- ----- 
1  1-1-07 1-1-07 0  XXX 
2  1-5-07 1-10-07 5  YYY 
3  2-8-07 2-12-07 4  ZZZ 

을,하지만 난 꽤하는 방법에 잃었어요 어디 필요. 나는 SQL에 익숙하지 않고 어떤 도움을 주셔서 감사합니다!

지금까지이 내 최고의 샷 :

SELECT DISTINCT 
    ID, ADMIT, DC, LOS, CLMID, MIN(ADMIT) 

FROM 
    TABLE1 

GROUP BY 
    ID, ADMIT, DC, LOS, CLMID 

ORDER BY 
    ID 

나는 또한 방금 최대 LOS 대신 최소한의 인정 선택 시도했지만, 그 중 하나가 그것을하지 않습니다.

감사합니다 :) MySQL의에서

+0

'MySQL'또는 'SQL Server'입니까? –

+1

문제 해결에 최선의 방법을 게시하십시오. –

+0

죄송합니다 - SQL Server입니다. 나는 너무 새로운거야>< – Ashley

답변

0

같은이 될 뭔가 :

Select distinct ID, * from admissions_table order by DC DESC group by ID 
+0

원하는 출력을 보셨습니까? –

1

이 우선 순위이고 당신은 row_number() 이러한 문제를 해결할 수 있습니다 :

select t.* 
from (select t.*, 
      row_number() over (partition by id order by admit asc, los desc) as seqnum 
     from table1 t 
    ) t 
where seqnum = 1; 

노트의 몇 :

  • 날짜가 실제로 문자열이 아니라 데이터베이스에 날짜/시간으로 저장된다고 가정합니다.
  • 첫 단락의 조건이 다소 모호합니다. 가장 늦은 admit 날짜에 가장 높은 los 인 각 환자에 대해 하나의 행을 가져옵니다.
관련 문제