0

所以我有一个看起来像(但有更多行)的表(称之为 tbl1):

        CUSIP_ID1   CUSIP_ID2   cor        dt_pnts  
        921910709   06738G407   0.99613     252
        739371102   06738G407   0.380706    213
        808524654   06738G407   0.580574    221
        78467V202   06738G407   0.366938    224
        808524854   06738G407   0.0127264   232
        78567V103   06738G407   0.0799898   198

等等

我的代码是(第二个表 tbl2 只有一个 ID#,我用它来匹配值)

insert into tbl3 (Ticker, cusip_id, maxcor) 
select b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor
from  tbl1 a, tbl2 b
where a.CUSIP_ID1 = b.CUSIP_ID
group by a.CUSIP_ID1, b.Ticker
order by maxcor desc
select * from tbl3

返回

    Ticker No_Indx_cusip maxcor  dt_pnts
    EDV     921910709   0.99613  NULL
    SCHR    808524854   0.989976 NULL
    VGIT    92206C706   0.988307 NULL
    ELD     97717X867   0.985073 NULL
    PDP     73935X153   0.979131 NULL
    TTFS    00768Y818   0.974691 NULL
    SCHO    808524862   0.974254 NULL
    RLY     78467V103   0.951472 NULL
    PXLG    739371102   0.937278 NULL
    VCIT    92206C870   0.934389 NULL
    INKM    78467V202   0.921616 NULL
    WDTI    97717W125   0.890677 NULL
    CEW     97717W133   0.847838 NULL

我想从 tbl1 中选择与 max(abs(a.cor)) 值匹配的相应 dt_pnts 从 tbl1 到 tbl3 (由于某种原因对我不起作用) - 即 0.99613 的值将对应于 dt_pnts 值 252 。 谢谢!

结果看起来像

Ticker No_Indx_cusip maxcor  dt_pnts
    EDV     921910709   0.99613  252
    SCHR    808524854   0.989976 124
    VGIT    92206C706   0.988307 252
    ELD     97717X867   0.985073 79
    PDP     73935X153   0.979131 89
    TTFS    00768Y818   0.974691 252
    SCHO    808524862   0.974254 198
    RLY     78467V103   0.951472 38
    PXLG    739371102   0.937278 138
    VCIT    92206C870   0.934389 212
    INKM    78467V202   0.921616 90
    WDTI    97717W125   0.890677 16
    CEW     97717W133   0.847838 153
4

2 回答 2

1

看起来您需要在 MAX(abs(a.cor)) 上附加连接到 tbl1 中的 cor 值,以检索最大 cor 值的实际 dt_pnts。我认为下面会起作用,因为它会重新连接到 CUSIP_ID1 上的 tbl1 表,并利用 HAVING 子句仅返回 cor 值等于 MAX(abs(a.cor)) 值的 dt_pnts 值:

select 
    b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor, dt.dt_pnts
from  
    tbl1 a INNER JOIN
    tbl2 b ON
        a.CUSIP_ID1 = b.CUSIP_ID INNER JOIN
    (SELECT CUSIP_ID1, cor, dt_pnts FROM Table1) dt ON a.CUSIP_ID1 = dt.CUSIP_ID1
WHERE
    a.dt_pnts > 10
group by a.CUSIP_ID1, b.ID, dt.dt_pnts, dt.cor
having dt.cor = MAX(abs(a.cor))
于 2013-08-13T17:27:05.207 回答
-1

您忘记包含最后一列 (dt_pts) 的逻辑。在这里,我为 table3 添加了 dt_pts 列。试试这个,它可能对你有用。

 insert into tbl3 (Ticker, cusip_id, maxcor, dt_pts) 
 select b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor, a.dt_pts dt_pts
 from  tbl1 a, tbl2 b
 where a.CUSIP_ID1 = b.CUSIP_ID
 group by a.CUSIP_ID1, b.Ticker
 order by maxcor desc
 select * from tbl3
于 2013-08-13T16:06:08.207 回答