Я новичок в peopleoft. Я могу понять дату вступления в действие на концептуальном уровне, но я все еще боюсь с ним в SQR. Как получить эффективный датированный документ из таблицы PS_JOB? Как получить правильное имя empname из ps_names для извлеченного empid? Заранее спасибо!Как извлечь эффективную датированную копию из таблицы PS_JOB
ответ
текущее имя - из представления ps_names_vw вы можете использовать аналогичное предложение where для таблицы ps_job.
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'));
Соедините имена и таблицу рабочих мест со своей соответствующей датой вступления в силу. здесь я взял сотрудников A, L, P, S, считая, что вам нужны только имена активных сотрудников. Если нет, вы можете удалить критерий empl_status. Также вам нужно указать имя_имя в главном критерии, иначе несколько строк могут быть возвращены для одного 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')
Ниже запрос будет получать вам самые последние данные работника с Emplid 'XXX' от PS_JOB
SELECT * FROM PS_JOB J WHERE J.EMPLID = 'XXX' И J.EFFDT = (SELECT MAX (J1.EFFDT) ОТ PS_JOB J1 ГДЕ J1.EMPLID = J.EMPLID И J1.EMPL_RCD = J.EMPL_RCD И J1.EFFDT < ОТБР (SYSDATE)) И J.EMPL_RCD = (SELECT MAX (J2.EMPL_RCD) ОТ PS_JOB J2 Где J2.EMPLID = J.EMPLID И J2.EFFDT = J.EFFDT) И J.EFFSEQ = (SELECT MAX (J3.EFFSEQ) ОТ PS_JOB J3 ГДЕ J3.EMPLID = J.EMPLID И J3.EMPL_RCD = J.EMPL_RCD И J3.EFFDT = J.EFFDT)
ORDER BY J.EMPLID, J.EMPL_RCD, J.EFFDT, J.EFFSEQ
вы спрашиваете о синтаксисе запроса SQL в SQR? – Bob