2016-07-27 72 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

相關問題