次のクエリがあります
SELECT * FROM(
SELECT
CASE
WHEN TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM') = '10'
THEN
TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM')
WHEN SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 1, 1) = '0'
THEN
SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 2, 1)
ELSE
SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 1, 2)
END
AS CUR_MONTH_FRMTD,
P.OPR_DATE,
P.INDICE,
P.LOAD_TYPE,
P.CONTRACT_MONTH,
P.CONTRACT_YEAR,
P.VALUE,
P.DATE_INSERTED,
P.DATE_UPDATED
FROM ZE_DATA.PWX_FWD_CURVE P ) Q
WHERE
Q.LOAD_TYPE = 'HLH'
AND Q.INDICE = 'MidC'
AND Q.CONTRACT_YEAR = TO_CHAR(:DATEINPUT, 'YYYY')
AND Q.CONTRACT_MONTH = Q.CUR_MONTH_FRMTD
AND TO_CHAR(Q.DATE_INSERTED, 'MM') = TO_CHAR(:DATEINPUT, 'MM')
AND TO_CHAR(Q.DATE_INSERTED, 'YY') = TO_CHAR(:DATEINPUT, 'YY')
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT, 'DD')
必要に応じて 1 つのレコードのみを返し、挿入された日にレコードを絞り込むのに最適です。しかし問題は、土曜日または日曜日にレコードが挿入されないことであり、フィルタリングの有用性が損なわれます。
土曜日または日曜日の場合、金曜日のデータを取得する必要があります。以下のようなロジックが機能すると思いました。しかし、これは Oracle SQL では実行できません。
IF TO_CHAR(:DATEINPUT, 'DAY') = 'SATURDAY' THEN
WHERE
....
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-1, 'DD')
ELSE IF TO_CHAR(:DATEINPUT, 'DAY') = 'SUNDAY' THEN
WHERE
....
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-2, 'DD')
この時点で、select ステートメントでこれを機能させる必要があります。ストアド プロシージャを使用できません。誰かが解決策または回避策を考えることができますか?