1

新しく挿入された値を同じ ID を持つ以前の値と比較し、その差を変化率として表示できるようにしたいと考えています。

例:

id | bline_id |  avg   |    date

1  |     1    | 36.500 | 2013-03-28 11:08:10

31 |     1    | 37.130 | 2013-03-29 10:37:11

だから私が探しているのは 37.130-36.5/36.5 * 100 = 1.73% の変化です

4

2 に答える 2

1

例えば:

SELECT a.*
     , ROUND(((a.avg-b.avg)/b.avg)*100,2) pct_change
  FROM
     ( SELECT x.*
            , COUNT(*) rank
         FROM test x 
         JOIN test y 
           ON y.bline_id = x.bline_id 
          AND y.id >= x.id 
        GROUP 
           BY x.id
     ) a
  JOIN
     ( SELECT x.*
            , COUNT(*) rank
         FROM test x 
         JOIN test 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;
于 2013-03-29T18:30:23.057 に答える
1

MySQL テーブルで自己結合を使用すると、変更のすべての可能な組み合わせを計算できます。重複を避けるために、より大きい/小さい [gt/lt または等しい] ではない必要があります。以下のコードは、そのようなクエリを作成する方法についてのヒントを提供するはずですが、テストされておらず、1 つまたは 2 つのエラーが含まれている可能性があります。

SELECT ((larger.avg - smaller.avg) / (smaller.avg * 100)) AS change 
  FROM `table` AS smaller JOIN `table` AS larger 
  WHERE larger.id > smaller.id AND larger.bline_id = smaller.bline_id;
于 2013-03-29T18:29:15.303 に答える