我有一個外部第三方程序實時將數據庫導出到mysql,我想顯示報告數據.所以,我無法改變結構,因為它是實時同步的.
MySQL設置默認值,表結構是這樣的
ID | Date | Transaction
長度為16的順序表、-----------------------------
12 | 2012-11-01 | 200
二分查找 最多?12 | 2012-11-02 | 250
12 | 2012-11-03 | 150
12 | 2012-11-04 | 1000
12 | 2012-11-05 | 225
....
13 | 2012-11-01 | 175
13 | 2012-11-02 | 20
13 | 2012-11-03 | 50
13 | 2012-11-04 | 100
13 | 2012-11-05 | 180
13 | 2012-11-06 | 195
數據非常大,每天都在變大.
我想要做的是基于這樣的事情構建一個報告(視圖表):
ID | Date | Transaction | Prev Day Transaction
----------------------------------------------------
12 | 2012-11-01 | 200 | 0
12 | 2012-11-02 | 250 | 200
12 | 2012-11-03 | 150 | 250
12 | 2012-11-04 | 1000 | 150
12 | 2012-11-05 | 225 | 1000
....
13 | 2012-11-01 | 175 | 0
13 | 2012-11-02 | 20 | 175
13 | 2012-11-03 | 50 | 20
13 | 2012-11-04 | 100 | 50
13 | 2012-11-05 | 180 | 100
13 | 2012-11-06 | 195 | 180
我只是無法獲得快速選擇語句.目前原始數據已經是283,120行.它每天會增長500行.
我嘗試過類似的東西:
SELECT *, (SELECT transaction FROM table as t2 WHERE t1.id=t2.id
AND t1.date>t2.date ORDER BY t2.date DESC LIMIT 0,1)
FROM table AS t1
它正在工作,但是select語句非常慢.大多數時候,它在操作過程中被切斷了.
我需要幫助的是一個非常快速的sql語句,稍后我可以使用它來構建視圖表.
解決方法:
select t.id,t.cDate,t.cTrans
,(case when @pID=t.id then @pTran else 0 end) as preT
,(@pID :=t.id) as `tID`,(@pTran := t.cTrans) as `tTrans`
from tb_test_1 as t,(select @pID = 0, @pTran = 0) as t2
order by id,cDate;
必須保留tID和tTrans列,并且不能在頁面上顯示.
請原諒我,因為我只懂一點英語!
標簽:optimization,mysql,select,row
來源: https://codeday.me/bug/20190613/1231038.html
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态