Как создать запрос, который включает список идентификаторов сотрудников для сотрудников, которые имеют значение, которое имело место в диапазоне дат, уникальных для сотрудника? - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно ввести отдельные идентификаторы сотрудников для любого сотрудника, который выполнил корректирующее действие, со списком идентификаторов типов корректирующих действий в течение 180 дней после даты их корректирующего действия.

, поэтому, если у меня есть сотрудник Джон Доукоторый получил идентификатор типа корректирующего действия 123 от 08.07.2008. Мне нужно знать, получил ли он корректирующее действие для идентификаторов типов 123, 456 или 789 за 180 дней до их текущего корректирующего действия или через 60 дней после.

Sample Table

В приведенной выше таблице примеров я хотел бы, чтобы она ввела идентификаторы сотрудников 1 и 5, поскольку они предприняли корректирующие действия в течение 180 дней.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы можете сделать это с помощью join:

select c.*, cnext.*
from corrective c join
     corrective cnext
     on cnext.employee_id = c.employee_id and
        cnext.ca_dt > c.ca_dt - 180 and
        cnext.ca_dt < c.ca_dt + 60 and
        cnext.ca_type in (123, 456, 789)
0 голосов
/ 08 июля 2019

Берто, кроме запроса Joakim о DDL и выборочных данных, вы сказали «текущее корректирующее действие», которое подразумевает последнее корректирующее действие, так как же может быть корректирующее действие через 60 дней после?Вот что может помочь вам сформулировать ваши требования:

set echo on
set feedback on

drop table t1;
create table t1 (empid number, corr_action_type number(04), corr_action_date date);
insert into t1 values (7654,123,sysdate - 140);
insert into t1 values (7654,456,sysdate - 092);
insert into t1 values (7654,789,sysdate - 062);
insert into t1 values (7521,123,sysdate - 120);
insert into t1 values (7521,256,sysdate - 120);

select e.*, c.*
from   emp e
join (select empid,
             min(corr_action_date) oldest,
             max(corr_action_date) mostrecent
      from   t1 where corr_action_type in (123,456,789)
             group by empid
      ) c
on c.empid = e.empno
where
  ( c.oldest <>  c.mostrecent and
    c.oldest >   c.mostrecent - 180
 )
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...