0

そのため、私のアプリケーションの 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); 
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 に答える