0

因此,对于我的一个应用程序,我决定我需要能够捕获比目前更详细的指标。我的小组创建了文档,特别是我想知道该文档在其开发的每个阶段花费了多长时间(以天为单位)。此数据将通过输入表单捕获,当我的团队成员将文档移动到不同阶段时,该表单将由他们填写。用于捕获此数据的表的结构如下:

 TBL_DOC_TIMELINE
 DOC_ENTRY_ID     DOC_ID     DOC_STATUS     DOC_DATE       DOC_PHASE_DURATION
 1                123        Planned        06-05-2012     

我需要弄清楚如何做的是,当创建新条目时,DOC_PHASE_DURATION上一个条目上的将填充DOC_DATE该文档的上一个条目与新条目之间的天数。它看起来像这样:

 DOC_ENTRY_ID     DOC_ID     DOC_STATUS     DOC_DATE       DOC_PHASE_DURATION
 1                123        Planned        06-05-2012     10     
 7                123        Draft          06-15-2012        

我们所有的文档都将为此函数使用同一个表,因此我不能简单地键入 DOC_ENTRY_ID,尽管它可以提供帮助。我需要找到 DOC_ID 的最大 DOC_ENTRY_ID,然后计算。我需要这样做,直到达到“已发布”状态,并且应该在单元格中插入哪个点“0”,因为那是该 DOC_ID 生命周期的结束。像这样:

 DOC_ENTRY_ID     DOC_ID     DOC_STATUS     DOC_DATE       DOC_PHASE_DURATION
 1                123        Planned        06-05-2012     10     
 7                123        Draft          06-15-2012     5
 38               123        Approval       06-20-2012     10 
 102              123        Published      06-30-2012     0

我想这将在 SQL 页面进程甚至触发器中。下面是我整理的伪代码,但我确信它有缺陷。还没有机会对其进行测试,但我想就我是否走在正确的轨道上征求您的意见。一旦我有机会运行它,我将进行编辑。谢谢。

UPDATE TBL_DOC_TIMELINE  
SET DOC_PHASE_DURATION = 
  (SELECT trunc((trunc(DOC_DATE)- &P1_DOC_DATE.)) 
  FROM TBL_DOC_TIMELINE WHERE &P1_DOC_ID. = DOC_ID) 
WHERE DOC_ENTRY_ID = 
  (SELECT MAX(DOC_ENTRY_ID) FROM TBL_DOC_TIMELINE WHERE &P1_DOC_ID. = DOC_ID); 
4

1 回答 1

1

我认为您已经捕获了您需要的所有指标,因为持续时间可以从现有数据中得出。您可以创建一个视图:

create or replace  view vw_doc_timeline as
  select t.doc_entry_id, t.doc_id, t.doc_status, t.doc_date
       , case when doc_status = 'Published' then 0
              else lead(doc_date) over (partition by doc_id order by doc_entry_id)
                   - doc_date
              end as duration
  from tbl_doc_timeline t;

然后:

SQL> select * from vw_doc_timeline;

DOC_ENTRY_ID     DOC_ID DOC_STATUS                     DOC_DATE    DURATION
------------ ---------- ------------------------------ --------- ----------
           1        123 Planned                        05-JUN-12         10
           7        123 Draft                          15-JUN-12          5
          38        123 Approval                       20-JUN-12         10
         102        123 Published                      30-JUN-12          0
于 2012-06-18T11:23:30.460 回答