次のクエリを作成しましたが、残念ながら機能しません。私が達成しようとしているのは、各行で選択した日付が顧客関係の有効日であることだけです。
ci_per_per
表には次の列が含まれます。
per_id1
、per_id2
、start_dt
、end_dt
per_id1
は親、per_id2
は子です。
start_dt
end_dt
関係の期間を定義します
SELECT
CONNECT_BY_ROOT per_id2 AS per_id2,
per_id1,
(CASE WHEN start_dt < (PRIOR start_dt1)
THEN (PRIOR start_dt1)
ELSE start_dt
END) AS start_dt1,
(CASE WHEN end_dt > (PRIOR end_dt1)
THEN (PRIOR end_dt1)
ELSE end_dt
END) AS end_dt1,
level AS "PER_LEVEL"
FROM ci_per_per
CONNECT BY NOCYCLE PRIOR per_id1 = per_id2
SQLで発生するエラーは次のとおりです。END_DT1: Invalid identifier.
Oracleでこの機能を実現する方法はありますか?
シナリオ例:
per_id1 | per_id2 | start_dt | end_dt
-------------------------------------------
B | A | 01-01-2011 | 01-01-2011
C | B | 01-01-2010 | 01-01-2010
E | B | 01-01-2011 | 01-01-2014
D | C | 01-01-2009 | 01-01-2015
今、私はすべてのレコードを01-01-2011
開始日として持つようにしたいと考えています。ただし、階層が逆の場合 (per_id_1 と Per_id2 の値を交換することを意味します)、レコードはそのまま表示されます。
上記の例では、start with
句 withper_id2='A'
条件で実行する必要があることに注意してください。また、クエリを実行すると結果が変わる可能性があることを理解してくださいper_id2='B'
したがって、結果から始めるとper_id2='B'
、すべてのレコードが存在し、存在01-01-2010
しないようにする必要があります01-01-2011
ここで終了日が設定さ01-01-2011
れ、E を含むレコードと A を含むレコードを除くすべてのレコードが対象となります。終了日はnull
(A から開始すると仮定して) になります。