2016-07-27 6 views
0

間の最大値を見つけることが一定の間隔

row | amount 
_______________ 

1 | 54 
2 | 2 
3 | 102 
4 | 102 
5 | 1 
のは、私は量が何かのいくつかの任意の量である(果物か何かのように私達が種類を気にしない)ので、のようなテーブルを、持っているとしましょう

そして、指定した間隔内で最大値を持つ行を選択したいと思います。たとえば、私は彼らの両方が102である区間内の最大値を、含まれているため

row | amount 
_______________ 

3 | 102 
4 | 102 

になり返されるものを行2-5から選択するか、私だけを見て選択した場合を希望された場合

amount= (select MAX(amount) FROM arbitraryTable) 
:インターバル1-2最大値は行のみに存在するため、行1-2それは私が様々な使用しようとした1

row | amount 
_______________ 

1 | 54 

を返します

しかし102は、テーブルの絶対最大であるため、それは今まで

row | amount 
_______________ 

3 | 102 
4 | 102 

を返します。あなたは一定の間隔の間に最大値を見つけることができますか?

答えて

0

私は窓関数としてrank()またはmax()を使用します。

select t.row, t.amount 
from (select t.*, max(amount) over() as maxamount 
     from t 
     where row between 2 and 4 
    ) t 
where amount = maxamount; 
0

あなたは最大値を取得し、WHERE句でそれを使用するサブクエリを使用することができます。

SELECT 
    row, 
    amount 
FROM 
    arbitraryTable 
WHERE 
    row BETWEEN 2 AND 5 AND 
    amount = (
     SELECT 
      MAX(amount) 
     FROM 
      arbitraryTable 
     WHERE 
      row BETWEEN 2 AND 5 
    ); 

ちょうど使用することを忘れないでくださいメインクエリとサブクエリの同じ条件:row BETWEEN 2 AND 5

関連する問題