1

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
4

1 回答 1

4

你最好使用row_number()来获取这些信息:

select ticker, No_indx_cusip, cor, dt_pnts
from (select b.Ticker, a.CUSIP_ID1 as No_indx_cusip, a.cor, a.dt_pnts,
             row_number() over (partition by b.ticker order by abs(a.cor) desc) as seqnum
      from  tbl1 a 
      inner join tbl3 b
            on a.CUSIP_ID1 = b.CUSIP_ID and a.dt_pnts > 20
     ) t
where seqnum = 2;

这是查询。如果要将其插入表中,只需使用insert问题中的 as 即可。

于 2013-08-13T19:32:56.760 回答