そのため、私のアプリケーションの 1 つで、現在行っているよりも詳細なメトリックを取得する機能が必要であると判断しました。私のグループはドキュメントを作成しています。具体的には、そのドキュメントが開発の各フェーズに費やした正確な時間 (日数) を知りたいと考えています。このデータは、チームのメンバーがドキュメントを別のフェーズに移動するときに記入する入力フォームによって取得されます。このデータをキャプチャするためのテーブルは、次のように構成されています。
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 を見つけて計算する必要があります。「発行済み」のステータスに達するまでこれを行う必要があり、その DOC_ID のライフサイクルの終わりであるため、セルに「0」を挿入する必要があります。そのようです:
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);