Oracle APEX - SQL - 创建顺序历史记录并计算每个阶段之间的天数

时间:2012-06-15 19:42:52

标签: sql oracle

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

 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); 

1 个答案:

答案 0 :(得分: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