2014-08-28 3 views
0

이 질문은 답변이 다른 방언, 특히 Oracle에서 어떻게 보이는지보고 싶다는 점을 제외하고는 In one to many relationship, return distinct rows based on MIN value과 같습니다.오라클 - 일대 다 관계로 최소값을 기준으로 고유 한 행을 선택하십시오.

원래의 설명에서 재개시 :

는의는 환자가 많은 방문을하게 가정 해 봅시다. 그들의 초기 방문을 기반으로 환자의 행을 구별하는 쿼리를 작성하고 싶습니다. 예를 들어, 다음 행을 고려하십시오.

의 PostgreSQL을 사용하여 다른 질문에서
id name first_visit_date reference_number 
1  Bob  6/29/14    09f3be26 
2  Jim  7/10/14    448dd90a 

, 최적의 솔루션이 distinct on를 사용하는 듯하지만 다른 사용할 수 없습니다 :

patients 
------------- 
id name 
1  Bob 
2  Jim 
3  Mary 

visits 
------------- 
id patient_id visit_date reference_number 
1  1    6/29/14  09f3be26 
2  1    7/8/14  34c23a9e 
3  2    7/10/14  448dd90a 

내가 쿼리에서 반환보고 싶은 것은 방언.

답변

3

일반적으로, 하나는 row_number()는 사용

select id, name, visit_date as first_visit_date, reference_number 
from (select v.id, p.name, v.visit_date, v.reference_number, 
      row_number() over (partition by p.id order by v.visit_date desc) as seqnum 
     from visits v join 
      patients p 
      on v.patient_id p.id 
    ) t 
where seqnum = 1;