我是peopleoft的新手。我可以在概念层面理解生效日期,但我仍然在SQR中苦苦挣扎。如何从PS_JOB表中检索有效的日期empid?如何从ps_names中为检索到的empid检索有效的empname?提前谢谢!
答案 0 :(得分:0)
当前名称 - 来自ps_names_vw视图 你可以为ps_job表使用类似的where子句。
select a.emplid,
a.name_type,
a.effdt,
a.last_name,
a.first_name,
a.middle_name,
a.name_prefix,
a.name_suffix,
a.last_name_srch,
a.first_name_srch,
a.name_display
from ps_names a
where a.effdt = (select max (b.effdt)
from ps_names b
where b.emplid = a.emplid and
b.name_type = a.name_type and
b.effdt <= to_date (to_char (sysdate, 'YYYY-MM-DD'), 'YYYY-MM-DD'));
答案 1 :(得分:0)
加入姓名和工作表及其各自的生效日期。在这里,我已经雇用了A,L,P,S员工,假设您需要积极的员工&#39;只是名字。如果没有,您可以删除empl_status标准。您还需要在主标准中指定name_type,否则可能会为一个emplid返回多行。
SELECT * FROM PS_NAMES N, PS_JOB J
WHERE N.EMPLID = J.EMPLID
AND N.EFFDT = (SELECT MAX(N1.EFFDT) FROM PS_NAMES N1
WHERE N1.EMPLID= N.EMPLID
AND N1.NAME_TYPE = N.NAME_TYPE
AND N1.EFFDT <= SYSDATE)
AND J.EFFDT = (SELECT MAX(J1.EFFDT) FROM PS_JOB J1
WHERE J1.EMPLID = J.EMPLID
AND J1.EMPL_RCD = J.EMPL_RCD
AND J1.EFFDT <= SYSDATE)
AND J.EFFSEQ = (SELECT MAX(J2.EFFSEQ) FROM PS_JOB J2
WHERE J2.EMPLID = J.EMPLID
AND J2.EMPL_RCD = J.EMPL_RCD
AND J2.EFFDT = J.EFFDT)
AND J.EMPL_STATUS IN ('A','L','P','S')
答案 2 :(得分:0)
以下查询将从PS_JOB中获取Emplid'XXX'员工的最新数据
SELECT * FROM PS_JOB J
在哪里J.EMPLID ='XXX'
AND J.EFFDT =(SELECT MAX(J1.EFFDT)
来自PS_JOB J1
在哪里J1.EMPLID = J.EMPLID
AND J1.EMPL_RCD = J.EMPL_RCD
AND J1.EFFDT&lt; TRUNC(SYSDATE))
AND J.EMPL_RCD =(SELECT MAX(J2.EMPL_RCD)
来自PS_JOB J2
在哪里J2.EMPLID = J.EMPLID
AND J2.EFFDT = J.EFFDT)
AND J.EFFSEQ =(SELECT MAX(J3.EFFSEQ)
来自PS_JOB J3
在哪里J3.EMPLID = J.EMPLID
AND J3.EMPL_RCD = J.EMPL_RCD
AND J3.EFFDT = J.EFFDT)
订单来自J.EMPLID,J.EMPL_RCD,J.EFFDT,J.EFFSEQ