我有以下查询
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')
将记录缩小到插入之日非常有效,根据需要只返回一条记录。但问题是周六或周日没有插入记录,破坏了过滤的用处。
对于周六或周日,我需要获取周五的数据。我认为像下面这样的逻辑会起作用。但这不能在 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 语句中完成这项工作。不能使用存储过程。谁能想到解决方案或解决方法?