2016-07-27 4 views
0

Скажем, у меня есть таблица, как это так, где сумма некоторое произвольное количество чего-то (например, фрукты или что-то, но мы не заботимся о типе)Нахождение максимального значения между заданным интервалом

row | amount 
_______________ 

1 | 54 
2 | 2 
3 | 102 
4 | 102 
5 | 1 

И я хочу выбрать строки, которые имеют максимальное значение в течение заданного интервала. Например, если бы я только хотел, чтобы выбрать из строк 2-5, что будет возвращено будет

row | amount 
_______________ 

3 | 102 
4 | 102 

Поскольку оба они содержат максимальное значение в пределах интервала, который 102. Или, если я выбрал только посмотреть на строки 1-2 было бы вернуть

row | amount 
_______________ 

1 | 54 

Поскольку максимальное значение в интервале 1-2 существует только в строке 1

Я пытался использовать разнообразные:

amount= (select MAX(amount) FROM arbitraryTable) 

Но это будет только когда-либо вернуться

row | amount 
_______________ 

3 | 102 
4 | 102 

Поскольку 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.

Смежные вопросы