所以我有一个看起来像(但有更多行)的表(称之为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到tbl3的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
答案 0 :(得分: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))
答案 1 :(得分:-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