0
depth   ktim
6999.0  576.46
6999.5  892.10
7000.0   10.12
7000.5   22.07
7001.0  186.55
7001.5  577.98
7002.0  799.42
7002.5  334.15
7003.0   99.43
7003.5  111.43
7004.0   41.94

だから私は巨大なデータベーステーブルを持っています、上記は簡単な例です。MySQLに5つの最も高い隣接値を持つ値を出力するクエリを実行させる方法はありますか?クエリを5、10、20などに調整する必要があります。

したがって、ktim列の隣接する5つのセルごとに合計すると、合計ktimが1997.53であり、次のように出力されるため、最も高い5つは7001.0〜7003.5になります。

depth   ktim
7001.0  186.55
7001.5  577.98
7002.0  799.42
7002.5  334.15
7003.0   99.43

テーブルは深さでソートされ、隣接関係は常に深さに基づいて計算されます。

4

1 に答える 1

2

本当の問題は、最大合計5とそれが発生する場所を取得することです。深さは通常のシーケンスとして0.5ずつ増加しているようです。これに依存できる場合は、次のクエリで最初のktim値を現在の値まで加算してから、最大値を返します。

select t.*
from (select t.*,
             (select SUM(ktim) from t t2 where t2.depth between t.depth - 2.25 and t.depth
             ) as lastfivesum
      from t
     ) t
order by lastfivesum
limit 1

これにより、最後の行が表示7003.0されます(例では)。5つすべてが必要な場合は、これをintとして元のテーブルに結合し直します。

select t.*
from t join
     (select t.*
      from (select t.*,
                   (select SUM(ktim) from t t2 where t2.depth between t.depth - 2.25 and t.depth
                   ) as lastfivesum
            from t
           ) t
      order by lastfivesum
      limit 1
     ) tmax
     on t.depth bewteen tmax.depth - 2.25 and tmax.depth

浮動小数点数の問題を防ぐためだけに2.25ではなく、を使用しています。2

于 2013-03-26T15:42:43.887 に答える