2013-03-29 5 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 

그래서 내가 찾고 있습니다/36.5 37.130-36.5 * 100 = 1.73 % A는 MySQL의 테이블에을 자체 조인 사용하여 변화

+2

? 시도한 코드를 보여줄 수 있습니까? – Rikesh

+0

얼마나 많은 블라인드가 있습니까? 둘 이상? –

+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

당신 ' 중복을 피하기 위해 모든 가능한 변경 조합을 계산할 수 있어야합니다. [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

관련 문제