任何人都可以请帮我在修改下面的查询,而无需使用分析功能和聚合功能,因为我有在创造用它查询修改物化视图与快速刷新。不使用解析函数
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
任何人都可以请帮我在修改下面的查询,而无需使用分析功能和聚合功能,因为我有在创造用它查询修改物化视图与快速刷新。不使用解析函数
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
从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()
函数。
您可以在内部/外部查询相同的表名称中使用子查询。
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
是实现上述查询 – Jig232
这是正确的方式将它mvierw工作 – Jig232