隔兩行生一行計算變化率
今天宋三胖宋老師發了他們單位的一個需求原型.
他這個原型似乎是每兩天,計算一個變化率. 資料都是示意的.
實際應該是如下圖所示
第三行變化率
計算公式
(第一行 - 第二行) / 第一行
他們大資料,資料倉儲的需求我也不是很明白.
實驗資料準備.
建立數字輔助表
計算:
變數@a 如果遇到需要計算的"第三行" 則加 2.
然後用數字輔助表外連線,這樣 計算生成的行就出來了。
最後用自定義變數,把值填上.
他這個原型似乎是每兩天,計算一個變化率. 資料都是示意的.
實際應該是如下圖所示
第三行變化率
計算公式
(第一行 - 第二行) / 第一行
他們大資料,資料倉儲的需求我也不是很明白.
實驗資料準備.
- CREATE TABLE `t` (
- `k` varchar(20) NOT NULL,
- `v1` float DEFAULT NULL,
- `v2` float DEFAULT NULL,
- PRIMARY KEY (`k`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160902',1.62,1.07);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160903',1.97,1.43);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160904',2.86,2.36);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160905',2.61,3.62);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160906',1.36,2.96);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160907',5.46,4.24);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160908',4.29,6.12);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160909',2.97,1.3);
- INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160910',5.06,2.26);
-
INSERT INTO `t` (`k`,`v1`,`v2`) VALUES ('20160911',4.46,4.11);
建立數字輔助表
- create table nums(id int not null primary key);
- INSERT INTO `nums` (`id`) VALUES (1);
- INSERT INTO `nums` (`id`) VALUES (2);
- INSERT INTO `nums` (`id`) VALUES (3);
- INSERT INTO `nums` (`id`) VALUES (4);
- INSERT INTO `nums` (`id`) VALUES (5);
- INSERT INTO `nums` (`id`) VALUES (6);
- INSERT INTO `nums` (`id`) VALUES (7);
- INSERT INTO `nums` (`id`) VALUES (8);
- INSERT INTO `nums` (`id`) VALUES (9);
- INSERT INTO `nums` (`id`) VALUES (10);
- INSERT INTO `nums` (`id`) VALUES (11);
- INSERT INTO `nums` (`id`) VALUES (12);
- INSERT INTO `nums` (`id`) VALUES (13);
- INSERT INTO `nums` (`id`) VALUES (14);
- INSERT INTO `nums` (`id`) VALUES (15);
- INSERT INTO `nums` (`id`) VALUES (16);
- INSERT INTO `nums` (`id`) VALUES (17);
- INSERT INTO `nums` (`id`) VALUES (18);
- INSERT INTO `nums` (`id`) VALUES (19);
-
INSERT INTO `nums` (`id`) VALUES (20);
計算:
- select
- ifnull(k, '變化率') k,
- ifnull(round(v1,4), @r1) r1,
- ifnull(round(v2,4), @r2) r2,
- @r1:=r1,
- @r2:=r2
- from(
- select
- a.*
- from
- nums n
- left outer join (
- select
- t1.k,
- t1.v1,
- t1.v2,
- round(@v1,4) as pv1,
- round(@v2,4) as pv2,
- round(@v1-v1/@v1,4) r1,
- round(@v2-v2/@v2,4) r2,
- @v1:=t1.v1 ,
- @v2:=t1.v2 ,
- @a:=@a + if(@a mod 3 = 0, 2, 1),
- @a - 1 rn
- from
- (select @a:=0, @v1:=null, @v2:=null,@r1:=null,@r2:=null) var ,t t1
- order by k
- ) a ON (n.id = a.rn)
- WHERE
- n.id <= @a
- order by id
- ) f
-
;
變數@a 如果遇到需要計算的"第三行" 則加 2.
然後用數字輔助表外連線,這樣 計算生成的行就出來了。
最後用自定義變數,把值填上.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2127080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隔兩行生一行計算變化率(續)
- 交強險日費率計算有變化
- 如何計算兩個時間間隔的天數
- 雲端計算技術帶動行業變化行業
- 討教大學|用流通合格率思維計算醫藥行業生產完成率行業
- javascript如何計算兩個日期之間的時間間隔JavaScript
- 新華社一行來訪中科院計算所
- Android Textview 一行居中 兩行居左AndroidTextView
- 留存率計算
- [OOD] 隔離變化-橋接模式橋接模式
- css兩個div在同一行排列CSS
- js計算兩個時間點時間間隔的程式碼例項JS
- 美國兩位計算機系教授:Java對學生有害計算機Java
- 雲端計算的7種變化方式
- 【Openxml】顏色變化屬性計算XML
- JAVA 隔N行取一行寫入新文字,遍歷TXT文字Java
- PostgreSQL執行計劃變化SQL
- 第七篇:使用 CUDA 進行計算優化的兩種思路優化
- WM_CONCA函式兩行合成一行資料函式
- 計算CAN波特率
- KETTLE一行一行執行方法
- OpenMP並行化例項----Mandelbrot集合並行化計算並行
- 雲端計算開發分析:2019年雲端計算行業將有那些趨勢或者變化行業
- 新股中籤率怎麼算?新股中籤率計算公式公式
- 計算頁面執行時間的兩種方法
- 一行程式碼使Android狀態列變沉浸式透明化行程Android
- “雲端計算”時代 儲存架構如何變化架構
- SQL查詢 多列合併成一行用逗號隔開stuff()SQL
- 執行計劃變化的處理
- SQL面試必考——計算留存率SQL面試
- Forrester企業虛擬化率推進雲端計算應用REST
- 《第一行程式碼——Android》封面誕生記行程Android
- 正向合約&反向合約倉位變化計算
- 改變數學的命運——《計算進化史》變數
- 位元組遊戲夢醒,遊戲行業也在發生變化遊戲行業
- 基於CBO優化器謂詞選擇率的計算方法優化
- COUNT(*)計算行數有哪些優化手段優化
- Python計算商品復購率Python