Как ограничить возврат результатов - PullRequest
0 голосов
/ 25 октября 2019

Мой запрос возвращает повторяющиеся строки, и я хочу вернуть только одну строку.

select  papf.Full_Name,
          papf.Employee_number,
          papf.DatE_OF_BIRTH,
          peef.last_update_date
        /*,
        petf1.ELEMENT_NAME as MedicalSchemeName*/
from per_all_people_f papf
    ,per_all_assignments_f paaf
    ,PAY_ELEMENT_ENTRIES_F peef
    ,pay_element_types_f petf
    --,fnd_user fnu    
    where (papf.Employee_number) not in
(select 
        papf1.Employee_number

from per_all_people_f papfinner
    ,per_all_assignments_f paafinner
    ,PAY_ELEMENT_ENTRIES_F peefinner
    ,pay_element_types_f petfinner

where   paafinner.person_id = papfinner.person_id
and     peefinner.assignment_id = paafinner.assignment_id
and     peefinner.element_type_id = petfinner.element_type_id

and     upper(petf1.ELEMENT_NAME) like '%Condition%'

and     SYSDATE BETWEEN  papfinner.EFFECTIVE_START_DATE AND    papfinner.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  paafinner.EFFECTIVE_START_DATE AND    paafinner.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  peefinner.EFFECTIVE_START_DATE AND    peefinner.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  petfinner.EFFECTIVE_START_DATE AND    petfinner.EFFECTIVE_END_DATE
)
and     SYSDATE BETWEEN  papf.EFFECTIVE_START_DATE AND    papf.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  paaf.EFFECTIVE_START_DATE AND    paaf.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  peef.EFFECTIVE_START_DATE AND    peef.EFFECTIVE_END_DATE
and     SYSDATE BETWEEN  petf.EFFECTIVE_START_DATE AND    petf.EFFECTIVE_END_DATE
and     upper(petf.ELEMENT_NAME) not like '%Condition%'
and     rownum <= 10000
order by peef.last_update_date;
 ....

Этот запрос работает правильно и возвращает правильные результаты, но результаты дублируются. Мне нужен только один уникальный ряд

1 Ответ

1 голос
/ 25 октября 2019

Одна из таблиц, к которой вы присоединились, возвращает двойные или более. Бьюсь об заклад, это "пиф". Возможно, вы можете только показать MAX(last_update_date) и свернуть все остальное против этого. Так что просто GROUP BY.

select  papf.Full_Name,
        papf.Employee_number,
        papf.DatE_OF_BIRTH,
        last_update_date = MAX(peef.last_update_date)
...

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