我的情况是,如果系统日期在当前季度的1到5之间,则计算不应包括当前季度数据,如果它大于5,则必须包括所有数据。
我试图在where子句中包含这个条件,但我无法实现结果。
你可以帮我解决这个问题吗
SELECT
Dense_Rank() over(order by AMOUNT desc)as RANK,
FISCAL,
AMOUNT
FROM
T1 INNER JOIN T2 ON 1=1
WHERE ( FISCAL<( CASE WHEN t2.SYSDATE BETWEEN t2.CURRENTQUARTER_START_DATE AND ADD_DAYS(tw.CURRENTQUARTER_START_DATE,4)
THEN CURRENT_QUARTER
END ) OR (NULL)
我不确定如何包含这种情况。
答案 0 :(得分:1)
我认为这可能是你所追求的:
SELECT
Dense_Rank() over (order by AMOUNT desc) as RANK,
FISCAL,
AMOUNT
FROM
T1
WHERE
FISCAL <= (
SELECT
CASE
WHEN ADD_DAYS(SYSDATE, -5) >= CURRENTQUARTER_START_DATE
THEN SYSDATE /* or maybe CURRENTQUARTER_END_DATE ? */
ELSE ADD_DAYS(CURRENTQUARTER_START_DATE, -1)
END
FROM T2
)
虽然您可以通过连接执行此操作,但我认为将其分解为逻辑片段是有意义的,其中结束日期查找与子查询隔离,并且优化器将理解它应该只看到单个行/值。
答案 1 :(得分:0)
尝试:
CASE
WHEN t2.SYSDATE BETWEEN t2.CURRENT_QUARTER_START_DATE
AND ADD_DAYS(tw.CURRENTQUARTER_START_DATE, 4)
THEN CURRENT_QUARTER
ELSE NULL
END