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 に答える