2013-03-29 67 views
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%的变化

+2

你尝试过什么到目前为止?你能告诉我们你的代码吗? – Rikesh

+0

有多少个bline_id?两个或更多? – 2013-03-29 18:18:58

+0

你已经使用了php标签,所以你期望一个php解决方案? – didierc

回答

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; 
+0

你我的朋友是炸弹!这非常出色!非常感谢! – bech64

1

使用上的MySQL表自联接你”我将能够计算出所有可能的变化组合,为了避免重复,你需要一个大于/小于[not gt/lt或equal]的值。下面的代码应该给出一些关于如何构建这样的查询的提示,虽然它没有经过测试并且可能包含一两个错误。

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; 
+0

感谢你的努力 – bech64

相关问题