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場所と括弧 () がどこにあるのかわかりませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

0

したがって、行を 2 回ずつ取得するためにある種のクエリを実行し、いくつかの計算を行っています。幸いなことに、クエリは、テーブルにリンクするために必要な を
既に返しています。 bline_idbl

したがって、bl.bline必要なフィールドを取得するには、結果にもう 1 つのジョイントが必要です。

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;
于 2013-04-03T12:38:27.007 に答える