在连接多个表之后,需要查询语法来获取PKID的最新信息

时间:2015-11-15 07:23:40

标签: sql oracle

我有3张桌子:

select * from company
select * from emp_profile
select * from emp_salary_upgrade_tracker


table 1, company_pkid, company_code, company_name

table 2,  emp_profile_pkid,company_fk_id, emp_number, emp_name, salary

table 3, salary_pk_id,emp_profile_fk_id,emp_number, old_salary, current salary

每当员工的工资发生变化时,都会在emp_salary_upgrade_tracker中进行跟踪。

我需要编写一个查询来获取 的 company_code, emp_number, emp_name, old_salary, current salary

此处的结果应该是最新的条目,即emp_salary_upgrade_tracker的最新工资变化。

加入表后,我需要从emp_salary_upgrade_tracker中获取最新信息(pkid的顺序可能是)。

但我对查询语法一无所知。请帮忙

2 个答案:

答案 0 :(得分:1)

使用子查询获取lates ID:

select c.company_code, 
       e.emp_number,
       e.emp_name,
       t.old_salary, 
       t.current_salary
from(select emp_profile_fk_id, max(salary_pk_id) as salary_pk_id
     from emp_salary_upgrade_tracker group by emp_profile_fk_id) m
join emp_salary_upgrade_tracker t on m.salary_pk_id = t.salary_pk_id
join emp_profile e on t.emp_profile_fk_id = e.emp_profile_pk_id
join company c on e.company_fk_id = c.company_pkid

答案 1 :(得分:1)

这是一种使用row_number选择包含emp_salary_upgrade_tracker表中最新值的行的方法。按主键排序。

select * from (
    select *, 
        row_number() over (partition by esut.emp_number order by esut.salary_pk_id desc) rn 
    from emp_salary_upgrade_tracker esut
    join emp_profile ep on ep.emp_profile_pk_id = esut.emp_profile_fk_id
    join company c on c.company_pk_id = ep.company_fk_id
) t where rn = 1