2014-08-28 19 views
0

此問題與In one to many relationship, return distinct rows based on MIN value相同,但我希望看到其他方言(特別是Oracle)中答案的外觀。Oracle - 通過一對多關係,根據最小值選擇不同的行

從原來的描述重新發布:

比方說,一個病人讓許多參觀。我想寫一個查詢,根據他們最早的訪問返回不同的患者行。例如,請考慮以下行。

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 

什麼我想看看該查詢返回的是:

id name first_visit_date reference_number 
1  Bob  6/29/14    09f3be26 
2  Jim  7/10/14    448dd90a 

在其他問題,使用PostgreSQL,最好的解決辦法似乎是使用distinct on,但不是在其他可用方言。

回答

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;