2017-02-15 51 views
0

我想返回每一天的详细信息,但每天只能返回与最大ID_EXECN相关的详细信息。这里是我的代码:sql oracle - 每天返回最大值的天数

SELECT 
T1.ID_EXECN,  
T1.DT_HDG_EFF, 
T1.ID_DERIV,  
T1.CUSIP   

FROM  
(SELECT 
he.ID_EXECN,  
he.DT_HDG_EFF, 
d.ID_DERIV,  
d.ID_CUSIP AS CUSIP  
FROM  
(hdvsudbr.deriv_popltn d 
INNER JOIN hdvsudbr.hdg_execn_job_deriv_popltn jdp   
ON jdp.ID_DERIV = d.ID_DERIV  
INNER JOIN hdvsudbr.hdg_execn_job hej  
ON hej.ID_JOB = jdp.ID_JOB   
INNER JOIN hdvsudbr.hdg_execn he   
ON he.ID_EXECN = hej.ID_EXECN) 

WHERE hej.CD_JOB_TYPE = 9 
AND he.DT_HDG_EFF >=LAST_DAY(ADD_MONTHS(SYSDATE,-5))) T1 

我的电流输出是这样的:

有些日子,有一个以上的ID_EXECN(两个,三个或更多)和一些日子恰好有一个ID_EXECN,所以最大的日子里有一个应该只是返回相同的一个。

ID_EXECN  DT_HDG_EFF ID_DERV CUSIP 
40   11/8/2016 1  Z800 
40   11/8/2016 2  Z801 
41   11/8/2016 1  Z800 
41   11/8/2016 2  Z801 
22   11/9/2016 1  Z800 
22   11/9/2016 2  Z801 
23   11/9/2016 1  Z800 
23   11/9/2016 2  Z801 
24   11/9/2016 1  Z800 
24   11/9/2016 2  Z801 
10   11/10/2016 1  Z800 
10   11/10/2016 2  Z801 

这是我试图获得输出,只需用最大ID_EXECN记录在指定日期:

ID_EXECN  DT_HDG_EFF ID_DERV CUSIP 
41   11/8/2016 1  Z800 
41   11/8/2016 2  Z801 
24   11/9/2016 1  Z800 
24   11/9/2016 2  Z801 
10   11/10/2016 1  Z800 
10   11/10/2016 2  Z801 

到目前为止,我刚才已经能够获取最大ID_EXECN为查询中的所有日子,在这种情况下是41,但这不是我想要的。我想每天的最大值。其他情况下,我的查询运行,但只是没有返回。

回答

0

你可能在你的这个窗口功能RANK

select T1.ID_EXECN, 
    T1.DT_HDG_EFF, 
    T1.ID_DERIV, 
    T1.CUSIP 
from (
    select he.ID_EXECN, 
     he.DT_HDG_EFF, 
     d.ID_DERIV, 
     d.ID_CUSIP as CUSIP rank() over (
      partition by he.DT_HDG_EFF order by he.ID_EXECN desc nulls last 
      ) rnk 
    from (
     hdvsudbr.deriv_popltn d inner join hdvsudbr.hdg_execn_job_deriv_popltn jdp on jdp.ID_DERIV = d.ID_DERIV 
     inner join hdvsudbr.hdg_execn_job hej on hej.ID_JOB = jdp.ID_JOB 
     inner join hdvsudbr.hdg_execn he on he.ID_EXECN = hej.ID_EXECN 
     ) 
    where hej.CD_JOB_TYPE = 9 
     and he.DT_HDG_EFF >= LAST_DAY(ADD_MONTHS(SYSDATE, - 5)) 
    ) T1 
where rnk = 1 
0

这个工作,只需要一个,将CUSIP