Tbl1 は次のようになります。
CUSIP_ID1 CUSIP_ID2 cor dt_pnts
00768Y818 00162Q726 0.974691 252
00768Y818 00162Q205 0.874761 4
00768Y818 00162Q103 0.774691 48
73935X153 00162Q726 0.979131 39
73935X153 132061201 0.975207 252
73935X153 34416W866 0.967654 152
739371102 464287671 0.937278 252
739371102 464287309 0.935797 252
78467V103 33939L407 0.951472 35
78467V103 78463X541 0.930144 252
78467V103 57060U795 0.923911 108
私のコードは次のとおりです:(tbl3はティッカーの単なる参照テーブルです)
insert into tbl2 (ticker, cusip_id, maxcor, dt_pnts)
select b.Ticker, a.CUSIP_ID1 No_indx_cusip, max(abs(a.cor)) maxcor, dt.dt_pnts
from tbl1 a
inner join tbl3 b on
a.CUSIP_ID1 = b.CUSIP_ID and a.dt_pnts > 20
inner join
(
select cusip_id1, cor, dt_Pnts
from tbl1
) dt ON a.CUSIP_ID1 = dt.CUSIP_ID1
group by a.CUSIP_ID1, b.Ticker, dt.dt_pnts, dt.cor
having abs(dt.cor) = MAX(abs(a.cor))
select * from tbl2
各ティッカー/cusip_id とそれぞれの日付ポイントの最大相関値を見つけて返すだけです。
ticker cusip_id maxcor dt_pnts
TTFS 00768Y818 0.974691 252
PXLG 739371102 0.937278 252
INKM 78435X153 0.979131 39
RLY 78467V103 0.951472 35
ただし、CUSIP_ID1 ごとに同じ条件 (dt_pnts が > 20) で 2 番目に大きい相関 (cor) の値を見つけたいと思います。少しいじってみましdense_rank()
たが、まだまだ初心者なので助けが必要です(お願いします!)
戻り値は次のとおりです。
ticker cusip_id maxcor dt_pnts
TTFS 00768Y818 0.774681 48
PXLG 739371102 0.935797 252
INKM 78435X153 0.975207 252
RLY 78467V103 0.923911 108