0

我有一个mysql表A,它存储一系列数字和时间戳

value    timestamp
12087    2012-01-01 00:00:00
12110    2012-01-02 02:00:00
12223    2012-01-04 03:00:00
12312    2012-01-04 05:00:00
12387    2012-01-04 06:00:00
12388    2012-01-05 01:11:23
...

值和时间戳都是有序的:时间戳越大,值越大,但它们之间没有其他依赖关系。

我需要在一段时间内找到排序序列中的值之间的最大差异。在示例中,差异是:

12110-12087=23
12223-12100=13
12312-12223=89
12387-12312=75
12388-12387=1

所以我们最大的区别是89。

问题是:如何为此编写 SQL 查询代码?要知道,我不想使用完整的产品和/或相关查询,因为表很大。

4

2 回答 2

1
select 
    (case when (@prev is null) then 0
    else abs(value - @prev) end) as diff
  , concat(value, '-', @prev)
  , @prev := value

    from (select value, dt from table1 order by dt) ordered
    order by diff limit 1

将期间限制器添加到 from 子查询中

编辑,新信息告诉我这是一个不可靠的方法 http://dev.mysql.com/doc/refman/5.0/en/user-variables.html ( ctrl + ffor SELECT @a, @a:=@a+1)

于 2012-06-06T15:30:21.837 回答
0
select max(result) 
from (
      select  ((select value 
                from Table t2 
                where t2.value > t1.value and t2.time <=  @PeriodEnd limit 1) 
      -  t1.value) as result 
      from Table t1
      where t1.value between @PeriodStart and @PeriodEnd
 ) as t where result is not null
于 2012-06-06T15:18:35.277 回答