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