Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何限制返回结果_Sql_Oracle - Fatal编程技术网

Sql 如何限制返回结果

Sql 如何限制返回结果,sql,oracle,Sql,Oracle,我的查询返回重复的行,我只想返回一行 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

我的查询返回重复的行,我只想返回一行

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;
 ....

此查询工作正常并返回正确的结果,但结果重复。我只需要一个唯一的行

您要加入的一个表返回双倍或更多。我打赌是皮夫。也许您只能显示MAXlast_update_日期,并根据该日期汇总其余日期。那就分组吧

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

使用rownum是否回答了您的问题?如果您需要返回多个字段,则分组方式的效率可能会降低。对于查询中的三个字段,这应该是可以的,但是,如果您返回所有字段,那么如果您在详细信息中生成了一个按上述顺序描述由组中的字段划分的行\号,然后创建一个外部查询,返回所有字段,并使用WHERE子句限制派生行\号字段=1,您将获得更好的性能