mysql数据行之间的对比,MySQL-查找同一表的行之间的差异

I have a table containing aggregated results with timestamps - meaning each result per time is the total so far:

date | time | ip | result

---------------------------------------

2011-03-01 | 10:00 | 10.0.0.1 | 200

2011-03-01 | 11:00 | 10.0.0.1 | 303

2011-03-01 | 12:00 | 10.0.0.1 | 415

2011-03-01 | 13:00 | 10.0.0.1 | 628

2011-03-01 | 10:00 | 10.0.0.2 | 198

2011-03-01 | 11:00 | 10.0.0.2 | 234

2011-03-01 | 12:00 | 10.0.0.2 | 373

2011-03-01 | 13:00 | 10.0.0.2 | 512

I'm trying to formulate a query that'll get the deltas between each time range:

date | time | ip | diff

---------------------------------------

2011-03-01 | 10:00 | 10.0.0.1 | 200

2011-03-01 | 11:00 | 10.0.0.1 | 103

2011-03-01 | 12:00 | 10.0.0.1 | 112

2011-03-01 | 13:00 | 10.0.0.1 | 213

2011-03-01 | 10:00 | 10.0.0.2 | 198

2011-03-01 | 11:00 | 10.0.0.2 | 36

2011-03-01 | 12:00 | 10.0.0.2 | 139

2011-03-01 | 13:00 | 10.0.0.2 | 139

...

So each row per date / ip grouping subtracts the one before it (or 0).

Any simple way to do this? thanks.

解决方案

Here is a solution without variables. I assume you have your initail data in a table called thetable.

SELECT date, time, ip,

result - IFNULL( (

SELECT MAX( result )

FROM thetable

WHERE ip = t1.ip

AND ( date < t1.date

OR date = t1.date AND time < t1.time )

) , 0) AS diff

FROM thetable AS t1

ORDER BY ip, date, time

Here we get the previous value with a subselect (the maximal result of the preceding timestamps from the same ip). IFNULL gives us a 0 if this was the first value, so initial results are displayed correctly.

I also recommend adding the following index to thetable:

CREATE INDEX sort1 ON thetable (ip, date, time);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值