我有一个看起来像这样的视图
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。
感谢您的帮助;)
答案 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
列。您可以使用正在排名的列。