SQL Leavers Query - PullRequest
       3

SQL Leavers Query

0 голосов
/ 24 апреля 2020

У меня есть запрос, чтобы показать сотрудников за последние 30 дней. Сотрудники удаляются из отчета, если в столбце «Полученные документы» указано «Y» и прошло 30 дней. Но если в столбце «Полученные документы» указано «N» и прошло более 30 дней, они все равно должны быть в отчете. Я ищу запрос, который может иметь такой результат. Ниже приведен запрос, который у меня есть, но он не работает.

SELECT
a.emp_no,
a.date_of_leaving,
b.INTERNAL_DISPLAY_NAME AS NAME,
b.free_field1 as paperwork_received
FROM
emp_employed_time_row a
LEFT JOIN COMPANY_PERSON_ALL B 
ON a.emp_no = b.emp_no
WHERE
emp_employed_time_api.get_date_of_leaving(a.company_id, a.emp_no, SYSDATE) BETWEEN trunc(SYSDATE, 
'mm')-30/*current month*/ AND SYSDATE
AND emp_employed_time_api.get_date_of_leaving(a.company_id, a.emp_no, SYSDATE) BETWEEN trunc(SYSDATE, 
'yyyy') AND SYSDATE

Текущие результаты введите описание изображения здесь Желаемые результаты введите описание изображения здесь

Таким образом, через 30 дней, Сотрудник A и B должны быть удалены из отчета, поскольку полученные документы - Y, но Сотрудник C должен все еще быть в отчете, поскольку полученные документы - N. После того, как полученные документы изменены на Y, то Сотрудник C удалено из отчета.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Попробуйте

SELECT
a.emp_no,
a.date_of_leaving,
b.INTERNAL_DISPLAY_NAME AS NAME,
b.free_field1 as paperwork_received,
emp_employed_time_api.get_date_of_leaving(a.company_id, a.emp_no, SYSDATE) as leaving_dt,
sysdate as todayy
FROM
emp_employed_time_row a
LEFT JOIN COMPANY_PERSON_ALL B 
ON a.emp_no = b.emp_no
and (
    case when sysdate-emp_employed_time_api.get_date_of_leaving(a.company_id, a.emp_no, SYSDATE) >= 30
         then 
             case when b.free_field1 = 'Y' then 0 
                  when b.free_field1 = 'N' then 1
                  else 1  /* case: paperwork received is null? */
              end
         else 1 /* case: leaving date < 30 days */
    end
);
0 голосов
/ 24 апреля 2020

Ваш обновленный запрос должен выглядеть одинаково -

SELECT a.emp_no,
       a.date_of_leaving,
       b.INTERNAL_DISPLAY_NAME AS NAME,
       b.free_field1 as paperwork_received
FROM emp_employed_time_row a
LEFT JOIN COMPANY_PERSON_ALL B ON a.emp_no = b.emp_no
WHERE (emp_employed_time_api.get_date_of_leaving(a.company_id, a.emp_no, SYSDATE) - SYSDATE >= 30 AND b.free_field1 = 'Y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...