2017-09-09 54 views
0

任何人都可以请帮我在修改下面的查询,而无需使用分析功能和聚合功能,因为我有在创造用它查询修改物化视图与快速刷新。不使用解析函数

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 
+0

SELECT os1.bp_id, os1.speciality_id, os1.updtd_dt, CASE WHEN os1.updtd_dt =(SELECT MAX(os2.updtd_dt) FROM tr_ods.ods_bp_specialty OS2 WHERE os2.bp_id = os1.bp_id GROUP BY os2.bp_id) THEN ELSE 0 END AS spec_rn FROM tr_ods.ods_bp_specialty OS1 – Jig232

+0

是实现上述查询 – Jig232

+0

这是正确的方式将它mvierw工作 – Jig232

回答

0

Oracle Database Data Warehousing Guide (12C)重新聚集:

上快速刷新

一般限制......

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

在快速刷新的限制与骨料

物化视图...

只有SUM,COUNT,AVG,STDDEV,方差,MIN和MAX都支持快速刷新。

集合函数必须发生仅作为 表达的最外部分。即,聚集体如AVG(AVG(X))或AVG(X)+ AVG(x)的 是不允许的。

对于每个集料如AVG(表达式),相应的COUNT(表达式) 必须存在。 Oracle建议指定SUM(expr)。请参阅使用物化视图与集料进一步 细节 要求。

我看不出任何方法可以在这些限制下模拟RANK()函数。

0

您可以在内部/外部查询相同的表名称中使用子查询。