mysql 如何选择2行_MYSQL – 从大表中的第二行中选择数据

我有一个外部第三方程序实时将数据库导出到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语句,稍后我可以使用它来构建视图表.

解决方法:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值