我有一个外部第3方程序将数据库实时导出到mysql,我想显示数据以进行报告。所以,我无法更改结构,因为它是实时同步的。
表结构是这样的
ID | Date | Transaction
-----------------------------
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语句,稍后我可以用它来构建视图表。
请参阅此链接:http://sqlfiddle.com/#!2/54a5e/12 http://sqlfiddle.com/#!2/54a5e/12
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
and tTrans
列必须保留,并且不能显示在页面上。
请原谅我,因为我只懂一点英语!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)