Ok 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;
每个表的主键都是person_name
和timestamp
。现在我的问题是,如果表中存在相同person_name
的多个实例,那么我只想在最近的一个left join
上。有谁知道如何将此行为添加到此查询?我正在使用Oracle。
谢谢!
答案 0 :(得分:4)
尝试:
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;