不使用分析函数进行查询修改

时间:2017-09-09 08:39:35

标签: sql oracle

任何人都可以帮我修改以下查询而不使用分析函数和聚合函数,因为我必须使用它来创建具有FAST刷新的物化视图。

SELECT bp_id,  
       updtd_dt,  
       RANK () OVER (PARTITION BY bp_id ORDER BY updtd_dt DESC)spec_rn  
FROM tr_ods.ods_bp_specialty  
WHERE updtd_dt IS NOT NULL  

2 个答案:

答案 0 :(得分:0)

来自Oracle Database Data Warehousing Guide (12C)聚合:

  

快速刷新的一般限制

     

...

     

它不能在SELECT中包含分析函数(例如,RANK)   子句。

  

使用聚合的物化视图快速刷新的限制

     

...

     

仅支持SUM,COUNT,AVG,STDDEV,VARIANCE,MIN和MAX进行快速刷新。

     

聚合函数必须仅作为最外层部分发生   表达。也就是说,AVG(AVG(x))或AVG(x)+ AVG(x)等聚合   是不允许的。

     

对于每个聚合,例如AVG(expr),相应的COUNT(expr)   必须在场。 Oracle建议指定SUM(expr)。看到   使用具有聚合的物化视图的要求   的信息。

在这些限制下,我无法看到任何可以模拟RANK()函数的方法。

答案 1 :(得分:0)

您可以在Inner / outer Query中的相同表名上使用子查询。