Как получить эффективный датированный empid из таблицы PS_JOB

Я новичок в peopleoft. Я могу понять дату вступления в силу на концептуальном уровне, но я все еще борюсь с ней в SQR. Как получить эффективный датированный empid из таблицы PS_JOB? Как я могу получить действительное empname из ps_names для извлеченного empid? Заранее спасибо!

3 ответа

Приведенный ниже запрос извлечет самые последние данные сотрудника с Emplid 'XXX' из PS_JOB

ВЫБЕРИТЕ * ИЗ PS_JOB J, ГДЕ J.EMPLID = 'XXX' И J.EFFDT = (ВЫБЕРИТЕ МАКС. (J1.EFFDT) ИЗ PS_JOB J1, ГДЕ J1.EMPLID = J.EMPLID И J1.EMPL_RCD = J.EMPL_RCD И J1.EFFDT< TRUNC (SYSDATE)) И J.EMPL_RCD = (ВЫБЕРИТЕ МАКС. (J2.EMPL_RCD) ИЗ PS_JOB J2, ГДЕ J2.EMPLID = J.EMPLID И J2.EFFDT = J.EFFDT) И J.EFFSEQ = (ВЫБЕРИТЕ МАКС (J3.EFFSEQ)) ИЗ PS_JOB J3 ГДЕ J3.EMPLID = J.EMPLID И J3.EMPL_RCD = J.EMPL_RCD И J3.EFFDT = J.EFFDT)
ЗАКАЗАТЬ J.EMPLID, J.EMPL_RCD, J.EFFDT, J.EFFSEQ

Объедините имена и таблицу заданий с соответствующей датой вступления в силу. здесь я взял сотрудников A, L, P, S, предполагая, что вам нужны только имена активных сотрудников. если нет, вы можете удалить критерий 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')

Текущее имя - из представления 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'));
Другие вопросы по тегам