ORACLE: Как выбрать предыдущее другое значение? - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть таблица, в которой хранится имя сотрудника, в нем есть следующие столбцы: Я бы; Дата, с; date_to; emp_id; jobname_id; класс;

Каждый emp_id может иметь много последовательных записей с одинаковым идентификатором jobname_id из-за множества изменений в классе. Как я могу выбрать предыдущий другой jobname_id, исключая те, которые совпадают с самыми последними?

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

В этом решении используется аналитическая функция 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 
/
0 голосов
/ 19 сентября 2011

Будет ли это работать для вашей проблемы:

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 не являются текущими.

РЕДАКТИРОВАТЬ: Я согласен с Чин Бун, что в основном это проблема дизайна и, возможно, это следует решить, а не работать вокруг этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...