将新值与先前值进行比较

时间:2013-03-29 18:12:00

标签: mysql

我希望能够将新插入的值与具有相同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%的变化

2 个答案:

答案 0 :(得分:1)

通过在MySQL表上使用自联接,您将能够计算所有可能的更改组合,为了避免重复,您需要大于/小于[不] gt / lt或等于]。下面的代码应该提供一些关于如何构造这样一个查询的提示,虽然它没有经过测试,可能包含一两个错误。

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;

答案 1 :(得分:1)

e.g:

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;