我正在尝试返回每天的详细信息,但只返回与每天的最大ID_EXECN相关的详细信息。这是我的代码:
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的最大天数应该只返回相同的一个。
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 :(得分: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
答案 1 :(得分:0)
这可行,只需要一个,在CUSIP之后