物化视图中的动态计算

Posted

技术标签:

【中文标题】物化视图中的动态计算【英文标题】:Dynamic calculations in a materialized view 【发布时间】:2011-08-11 20:45:33 【问题描述】:

我有一个问题,我创建了一个完美运行的物化视图。但是现在我需要对视图中的数据进行一些计算。该视图包含在不同项目中工作的员工的工作时间。每个项目都有固定的时间(time_available),员工必须在其中完成项目。我将工作时间汇总到一个月,以便更好地展示。我在这里要完成的是“项目固定金额”减去员工“工作时间”的“简单”减法。 这里的问题是某些项目的持续时间超过一个月。自然,我所有的值每个月都在一个元组中。因此,当我有 3 个月的项目工作时间时,我的视图如下所示:

MV_Working_Hours:

Project --- Time_Available --- DATE --- Employee --- Working Days
Project A --- 50 Days --- 2011-05 --- Mr. A --- 15 Days
Project A --- 50 Days --- 2011-06 --- Mr. A --- 16 Days
Project A --- 50 Days --- 2011-07 --- Mr. A --- 16 Days

我想做的是像这样计算剩余天数:

Project --- Time_Available --- DATE --- Employee --- Working d in Month ---remaining days
Project A --- 50 Days --- 2011-05 --- Mr. A --- 15 Days --- 35 Days
Project A --- 50 Days --- 2011-06 --- Mr. A --- 16 Days --- 19 Days <--- I get here 34 which is for my need wrong !!!
Project A --- 50 Days --- 2011-07 --- Mr. A --- 16 Days --- 3 Days

有没有办法用“just” sql 来实现这一点,还是我必须在 OWB 中使用 pl/sql?我使用的是 OWB 版本 11gR2

谢谢

【问题讨论】:

您好,我遇到了问题。我使用 sql 开发人员。当我运行 sql 语句时,我的值是正确的。但是当我使用语句或视图创建表时,值是错误的。这个问题的原因可能是什么?有什么建议么? THX 【参考方案1】:

您应该能够使用分析函数来生成运行总计。类似的东西

SELECT project,
       time_available,
       date_column,
       employee,
       working_days_in_month,
       time_available - 
         sum(working_days) over (partition by project 
                                     order by date) remaining_days
  FROM mv_working_hours

【讨论】:

感谢您的快速回答。您的解决方案完美运行。 好的,新视图的实现有问题。创建视图或表时得到错误的结果。当我在 sql developer 中执行语句时,值是正确的。可能导致此错误的原因。【参考方案2】:

您应该能够使用分析 SQL 函数来做到这一点。

11gR2 http://download.oracle.com/docs/cd/E14072_01/server.112/e10810/analysis.htm

SUM( "Working Days" )
  OVER (PARTITION BY "Project", "Employee"
  ORDER BY "DATE" 
  ROWS UNBOUNDED PRECEDING)

您应该能够从"Time_Available" 中减去它(您可能会返回负值,用零替换那些也可以在 SQL 中处理)


顺便说一句,我忍不住喜欢你为结果选择的标题..."reaming days"

根据项目的不同,A 先生可能会觉得栏目标题合适且合理。

【讨论】:

嗨,谢谢你的快速回答。您的解决方案完美运行!我真的很喜欢你对我的命名的评论:)一个小错字和“戏剧性”的事情机会:P thx again

以上是关于物化视图中的动态计算的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中使用物化视图或替代方案

Oracle 物化视图

Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行

计算结果的物化视图

Oracle - 物化视图中的视图

物化视图