我有存储员工职位名称的表,它包含以下列: ID; date_from; DATE_TO; EMP_ID; jobname_id;级;
由于许多等级更改,每个emp_id可以有许多具有相同jobname_id的连续记录。 如何选择以前的不同jobname_id,省略与最新的jobname_id相同的那些?
答案 0 :(得分:1)
此解决方案使用FIRST_VALUE()分析函数来识别每个员工的当前工作。然后它会过滤掉与那个不匹配的所有工作:
select distinct id
, jobname_id
from ( select id
, jobname_id
, first_value(jobname_id) over (partition by id
order by from_date desc) as current_job
from employee
where emp_id = 1234 )
where jobname_id != current_job
order by id, jobname_id
/
答案 1 :(得分:0)
这适合您的问题:
SELECT DISTINCT
e1.emp_id,
e1.jobname_id
FROM employee e1
WHERE NOT EXISTS
(SELECT 1
FROM employee e2
WHERE e1.emp_id = e2.emp_id
AND SYSDATE BETWEEN e2.date_from
AND NVL(e2.date_to, SYSDATE + 1));
(这假设您的表名为“employee”,emp_id是PK值。)
它选择emp_id,jobname_id值不是最新值的唯一emp_id,jobname_id值。
编辑:我同意Chin Boon的观点,从根本上说这是一个设计问题,也许应该解决这个问题而不是解决问题。