1

好的 SQL 和 Oracle 专家我有一个有点复杂的查询,我正在尝试构建。

这是我当前的查询:

select distinct person_info.person_name
     table2.value,
     table3.value,
     table4.value,
     table5.value
from person_info
    left join table2 on table2.person_name=person_info.person_name
    left join table3 on table3.person_name=person_info.person_name
    left join table4 on table4.person_name=person_info.person_name
    left join table5 on table5.person_name=person_info.person_name;

每个表的主键都是 theperson_name和 a timestamp。现在我的问题是,如果person_name一个表中存在多个相同的实例,那么我只想left join在最近的一个上。有谁知道如何将此行为添加到此查询中?我正在使用甲骨文。

谢谢!

4

1 回答 1

4

Try:

select distinct person_info.person_name
     t2.value,
     t3.value,
     t4.value,
     t5.value
from person_info
    left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table2 t) t2 
         on t2.person_name=person_info.person_name and t2.rowno=1
    left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table3 t) t3
         on t3.person_name=person_info.person_name and t3.rowno=1
    left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table4 t) t4
         on t4.person_name=person_info.person_name and t4.rowno=1
    left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table5 t) t5
         on t5.person_name=person_info.person_name and t5.rowno=1;
于 2010-10-04T13:48:18.740 回答