假设我有一张这样的桌子,其数量是任意数量的东西(如水果或其他东西,但我们不关心类型)
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 :(得分: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;
答案 1 :(得分: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
。