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)的情况下找到第二大相关性(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