2017-02-15 49 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