この質問は、この質問の続きです: ( Oracle APEX - SQL - シーケンシャル履歴の作成と各フェーズ間の日数の計算)
背景:
そのため、私のアプリケーションの 1 つで、以前よりも詳細なメトリックを取得する機能が必要であると判断しました。私のグループはドキュメントを作成しています。具体的には、そのドキュメントが開発の各フェーズに費やした正確な時間 (日数) を知りたいと考えていました。このデータをキャプチャするためのテーブルは、次のように構成されています。
TBL_DOC_TIMELINE
DOC_ENTRY_ID DOC_ID DOC_STATUS DOC_CATEGORY DOC_DATE
1 123 Planned OPEN 06-05-2012
7 123 Draft OPEN 06-15-2012
38 123 Approval OPEN 06-20-2012
102 123 Published CLOSED 06-30-2012
私たちのドキュメントはすべてこの関数に同じテーブルを使用しているため、DOC_ENTRY_ID を単純にキー入力することはできませんでした。DOC_ID の最大 DOC_ENTRY_ID を見つけて計算する必要がありました。「CLOSED」のDOC_CATEGORYに到達し、そのDOC_IDのライフサイクルの終わりであるため、セルに「0」が挿入されるまでこれを行います。そのようです:
DOC_ENTRY_ID DOC_ID DOC_STATUS DOC_CATEGORY DOC_DATE DOC_DURATION
1 123 Planned OPEN 06-05-2012 10
7 123 Draft OPEN 06-15-2012 5
38 123 Approval OPEN 06-20-2012 10
102 123 Published CLOSED 06-30-2012 0
これは現在、View コードの大まかなドラフトを提供してくれた素晴らしい Tony Andrews のおかげですべて達成されています。
create or replace view DOC_TIMELINE as
select t.DOC_ENTRY_ID, t.DOC_ID, t.DOC_STATUS, t.DOC_CATEGORY, t.DOC_DATE
, case when DOC_CATEGORY = 'CLOSED' 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;
私が今しなければならないこと:
これはすべて完全に機能しますが、最初のパスで、要件の非常に重要な部分を 1 つ忘れていました。私の目標は、ドキュメントが各フェーズでどれくらいの時間を費やしているかを知ることですが、ドキュメントが閉じられた後だけでなく、この情報をリアルタイムで収集する必要があることに気付くのを完全に怠っていました. この現在の設定では、ビューはライフサイクルの途中で次のようになります。
DOC_ENTRY_ID DOC_ID DOC_STATUS DOC_CATEGORY DOC_DATE DOC_DURATION
1 123 Planned OPEN 06-05-2012 10
7 123 Draft OPEN 06-15-2012 5
38 123 Approval OPEN 06-20-2012 -
問題が見えますか?そのドキュメントが承認状態にあった時間を知る必要がある場合は、その状態が終了するまで待って、その期間を計算する必要があります。そのため、20 日間その状態にあったとしても、私のメトリクスにはそれが反映されません。
特定の DOC_ID の MAX(DOC_ENTRY_ID) が DOC_CATEGORY = 'OPEN' の場合、SYSDATE() に対してこの値を計算するために、上記の View コードを微調整する方法を見つける必要があります。
assuming SYSDATE() = '06-29-2012'
DOC_ENTRY_ID DOC_ID DOC_STATUS DOC_CATEGORY DOC_DATE DOC_DURATION
1 123 Planned OPEN 06-05-2012 10
7 123 Draft OPEN 06-15-2012 5
38 123 Approval OPEN 06-20-2012 9
それは意味がありますか?View コードに別の CASE を追加する必要があると想像していますが、sytanx が問題を引き起こしています。おそらく皆さんにとっては簡単な解決策ですが、この種のケースと許可されているsytanxについての私の知識は限られており、私の研究では関連するものは何も明らかにされていません.
すべての助けに心から感謝します。みんなありがとう!