我希望能夠比較新插入的值與具有相同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%的變化
我希望能夠比較新插入的值與具有相同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%的變化
例如爲:
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;
你我的朋友是炸彈!這非常出色!非常感謝! – bech64
使用上的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;
感謝你的努力 – bech64
你嘗試過什麼到目前爲止?你能告訴我們你的代碼嗎? – Rikesh
有多少個bline_id?兩個或更多? – 2013-03-29 18:18:58
你已經使用了php標籤,所以你期望一個php解決方案? – didierc