Я создал приведенный ниже запрос, чтобы дать мне набор результатов в диапазоне дат, скажем, от 01-Jan-2018 (c_date_from ) and 31-dec-2018 (c_date_to)
Теперь я должен изменить это.Скажем, например, для данных ниже, если я передам c_date_from как 01-янв-2018 и c_date_to как 31-декабрь-2018.Если конечная дата 31 декабря 4712 года, она будет считаться нулевой.Работает нормально для всех случаев. Но в части кода, которую я сейчас хочу обработать, я хочу обработать таким образом, чтобы, если столбец assignment_end_date> был больше, чем c_date_to, он также обрабатывал его как ноль. Например:
+-----------+---------------+---------------+-----------------------+---------------------+--------+
| person_id | next_employee | employee_name | assignment_start_date | assignment_end_date | Client |
+-----------+---------------+---------------+-----------------------+---------------------+--------+
| 1 | XYZ | GEN | 02-JAN-2018 | 03-jun-18 | DEL |
| 1 | REC | GEN | 04-jun-18 | 01-nov-18 | DEL |
| 1 | YZ | GEN | 02-nov-18 | 01-JAN-2019 | DEL |
| 2 | FDGD | PA | 01-JAN-2018 | 02-APR-2018 | FAR |
| 2 | FDRY | PA | 03-APR-2018 | 31-DEC-4712 | FAR |
+-----------+---------------+---------------+-----------------------+---------------------+--------+
Для приведенной выше таблицы, мой запрос хорошо выбирает данные, и когда assignment_end_date равен 31-dec-4712, то при декодировании он меняет его на NULL.Теперь я хочу, чтобы assignment_end_date (id человека 1 максимальная дата 01-января-2019) был> c_date_to (31-декабрь-2018 в данном случае), тогда он также обрабатывает его как nul l.Как я могу справиться с этим в запросе ниже в том же dedede.
SELECT papf.person_id,
LEAD(papf.employee_number) OVER( ORDER BY papf.employee_number, paaf.effective_start_date,change_date ) next_employee,
PAPF.full_name employee_name,
to_char(paaf.effective_start_date,'DD-MON-YY') assignment_start_date,
DECODE(paaf.effective_end_date, to_date('12/31/4712', 'MM/DD/YYYY'), NULL, paaf.effective_end_date) assignment_end_date,
ppd.segment3 Client,
from
xl.x_current_employees_gtt PAPF , -
per_all_assignments_f PAAF,
per_pay_proposals ppp,
per_position_definitions ppd
WHERE 1 = 1
--AND papf.employee_number in (60180)
AND ppp.change_date(+) <= c_date_to
AND ppp.date_to(+) >= c_date_from
AND ppp.change_date(+) <= paaf.effective_end_date
AND ppp.date_to(+) >= paaf.effective_start_date
AND ppp.assignment_id(+) = paaf.assignment_id
AND paaf.primary_flag = 'Y'
AND paaf.assignment_status_type_id = g_assignment_status_type_id
AND paaf.assignment_type = 'E'
AND paaf.effective_start_date <= paaf.effective_end_date -- There are some cases, due to which this condition has been included
AND paaf.effective_start_date <= c_date_to
AND paaf.effective_end_date >= c_date_from
AND PAAF.person_id IN ( PAPF.person_id , NVL(papf.sez_person_id,PAPF.person_id) )
ORDER BY employee_id,paaf.effective_start_date , change_date ;