查询在SQL中添加季度条件

时间:2015-11-20 15:35:18

标签: sql oracle oracle11g

我的情况是,如果系统日期在当前季度的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)

我不确定如何包含这种情况。

2 个答案:

答案 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