从另一列SQL返回运行的最大列

时间:2018-11-21 15:40:14

标签: sql oracle window-functions

我有一个查询,我想在其中操作一列以返回仅包含另一个列中最后12个值中的最大值的数组(由于查询的其他部分)。

示例: 我想从以下位置添加列MaxLast12:

Month Power 
1     10
2     16
3     8
4     14
5     15
6     3
7     6
8     10
9     11
10    12
11    12
12    12
13    18
14    12

To become:
Month Power MaxLast12
1     10    10
2     16    16
3     8     16
4     14    16
5     15    16
6     3     16
7     6     16
8     17    17
9     11    17
10    12    17
11    12    17
12    12    17
13    18    18
14    12    18

创建一个更简单的解决方案也将有所帮助,在该解决方案中,我仅在查询中仅包含12行(不会那么准确,但足以达到目的)仅包含最大值。需要执行以下操作:

Month Power 
1     6
2     6
3     8
4     14
5     15
6     3
7     6
8     10
9     11
10    12
11    12
12    12

To become:
Month Power YearMax
1     10    17
2     16    17
3     8     17
4     14    17
5     15    17
6     3     17
7     6     17
8     17    17
9     11    17
10    12    17
11    12    17
12    12    17

由于我猜这两个问题的解决方案都将相似,因此请尽可能提供帮助。由于要修改现有类型的复杂查询,因此希望避免使用GROUP BY子句。

尝试使用max()来实现此目的,但是没有运气。

我正在使用SQL-developer。

1 个答案:

答案 0 :(得分:3)

在Oracle中,您将使用窗口函数:

select month, power,
       max(power) over (order by month rows between 11 preceding and current row)
from t;