如何获得特定月份的最大(排名)

时间:2014-10-16 15:04:59

标签: sql oracle

我有一个看起来像这样的视图

FORECAST_PERIOD  MONTH       COUNTRY    ENTRY_VIEW  V_TYPE  RES_CAT   MATCH_MONTH  RANK  VIS
June 2014 Week 1 01-JUL-2014  UK         Forecast    SSV     110      01-JUL-2014   1    10
June 2014 Week 1 01-JUL-2014  USA        Forecast    SSV     110      01-JUL-2014   1    5
June 2014 Week 1 01-JUL-2014  POLAND     Forecast    SSV     110      01-JUL-2014   1    30
July 2014 Week 2 01-JUL-2014  UK         Forecast    SSV     110      01-JUL-2014   2    15
July 2014 Week 2 01-JUL-2014  USA        Forecast    SSV     110      01-JUL-2014   2    10
July 2014 Week 2 01-JUL-2014  UPOLAND    Forecast    SSV     110      01-JUL-2014   2    40

我们在视图中构建了Rank列,但可能不必要。无论哪种方式,我们都试图让查询返回每个不同月份的最大值(排名)。我们不希望聚合数据,例如sum等。我们希望将其保持在此粒度级别,而是仅回退视图中具有每个不同月份的最高排名的行。在上面的情况下,将返回所有具有RANK 2的行。我们正在使用最新的Oracle SQL。

感谢您的帮助;)

1 个答案:

答案 0 :(得分:1)

一种方法是使用rank()函数:

select v.*
from (select v.*, rank() over (partition by month order by [rank] desc) as rankrank
      from view v
     ) v
where rankrank = 1;

使用此方法,您可能不需要rank列。您可以使用正在排名的列。