隔兩行生一行計算變化率(續)

壹頁書發表於2016-10-26
昨天的需求貌似不對啊.
要是計算變化率的話
應該是
10月1日和10月2日比,然後是10月2日和10月3日比.
昨天那個理解成了
10月1日和10月2日比,10月3日和10月4日比.

如果是
10月1日和10月2日比,然後是10月2日和10月3日比.
其實SQL還要簡單一些.

資料同前文.
http://blog.itpub.net/29254281/viewspace-2127080/

SQL



  1. select    
  2. case when id=1 then pk when  id=2 then k when id=3 then '變化率' end k,  
  3. case when id=1 then pv1 when  id=2 then v1 when id=3 then pv1-v1/pv1 end r1,  
  4. case when id=1 then pv2 when  id=2 then v2 when id=3 then pv2-v2/pv2 end r2  
  5. from nums n ,  
  6. (  
  7.         select     
  8.             t1.k,    
  9.             t1.k-1 pk,  
  10.             t1.v1,    
  11.             t1.v2,    
  12.             round(@v1,4) as pv1,    
  13.             round(@v2,4) as pv2,    
  14.             round(@v1-v1/@v1,4) r1,    
  15.             round(@v2-v2/@v2,4) r2,    
  16.             @v1:=t1.v1 ,    
  17.             @v2:=t1.v2 ,  
  18.             @a:=@a+1 rn  
  19.         from    
  20.             (select @a:=0,@v1:=null, @v2:=null,@r1:=null,@r2:=null) var ,t t1    
  21.         order by k     
  22. ) a where n.id<=3 and a.rn!=1; 


如果要間隔幾天
比如間隔一天.改造也是容易的.



  1. select    
  2. case when id=1 then k when  id=2 then pk when id=3 then '變化率' end k,  
  3. case when id=1 then v1 when  id=2 then pv1 when id=3 then r1 end r1,  
  4. case when id=1 then v2 when  id=2 then pv2 when id=3 then r2 end r2  
  5. from nums n ,  
  6. (  
  7.         select     
  8.             t1.k,    
  9.             t2.k pk,  
  10.             t1.v1,    
  11.             t1.v2,    
  12.             t2.v1 as pv1,    
  13.             t2.v2 as pv2,    
  14.             round(t1.v1-t2.v1/t1.v1,4) r1,    
  15.             round(t1.v2-t2.v2/t1.v2,4) r2  
  16.         from    
  17.             t t1    
  18.         left join t t2 on (t1.k=t2.k-2)  
  19.         where t2.k is not null  
  20.         order by t1.k  
  21. ) a where n.id<=3 ; 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2127127/,如需轉載,請註明出處,否則將追究法律責任。

相關文章