2013-04-03 62 views
0

当前SELECT查询需要帮助办成一个加入

SELECT a.*, ROUND(((a.avg-b.avg)/b.avg)*100,2) pct_change 
FROM 
    ( 
    SELECT x.*, COUNT(*) rank 
    FROM blavg x 
     JOIN blavg y 
      ON y.bline_id = x.bline_id 
      AND y.id >= x.id 
    GROUP BY x.id 
) a 
JOIN 
( 
    SELECT x.*, COUNT(*) rank 
    FROM blavg x 
     JOIN blavg y 
      ON y.bline_id = x.bline_id 
      AND y.id >= x.id 
    GROUP BY x.id 
) b 
    ON b.bline_id = a.bline_id 
    AND b.rank = a.rank+1 
WHERE a.rank = 1; 

我想也

SELECT bl_id, bline FROM bl 
bl.bl_id = blavg.bline_id 

我已经试过

SELECT bl_id, bline 
FROM bl bl 
    LEFT JOIN ON bl.bl_id = blavg.bline_id 

但不知道我是否有正确的语法,我不确定在哪里添加ON以及parens()去哪里。

任何帮助将不胜感激。

+0

你得到什么错误? – Deruijter

回答

0

所以你正在做某种查询来检索两次两次的行并做一些数学。
幸运的是,您的查询已经返回bline_id您需要链接到您的bl表。

所以,你只需要在你的结果多了一个联合检索bl.bline领域,你需要:

SELECT bl.bline, a.*, ROUND(((a.avg-b.avg)/b.avg)*100,2) pct_change 
FROM 
    ( 
    SELECT x.*, COUNT(*) rank 
    FROM blavg x 
     JOIN blavg y 
      ON y.bline_id = x.bline_id 
      AND y.id >= x.id 
    GROUP BY x.id 
) a 
JOIN 
( 
    SELECT x.*, COUNT(*) rank 
    FROM blavg x 
     JOIN blavg y 
      ON y.bline_id = x.bline_id 
      AND y.id >= x.id 
    GROUP BY x.id 
) b 
    ON b.bline_id = a.bline_id 
    AND b.rank = a.rank+1 
    LEFT OUTER JOIN bl 
     ON bl.bl_id = a.bline_id 
WHERE a.rank = 1; 
+0

@ScorpiO - 那好像太明显了!它的工作非常完美,非常感谢你! – bech64