Oracle SQL- Flag records based on record's date vs history

后端 未结 4 459
伪装坚强ぢ
伪装坚强ぢ 2021-01-27 06:01

This is my 1st post on the forum. Usually I was able to find what I needed - but to tell the truth - I am not really sure how to ask a correct question to the issue. Therefore,

4条回答
  •  没有蜡笔的小新
    2021-01-27 06:29

    You can use LAG function:

    SELECT
    "REGION"
    , "COUNTRY"
    , "IDNum"
    , "CUSTOMER"
    , "BUSSINESS"
    , "FISCALYEARMONTH"
    , "FISCALYEAR"
    , SUM("VALUE") 
    , MAX(CASE WHEN to_date(prev_fym,'YYYYMM')  >= ADD_MONTHS (to_date("FISCALYEARMONTH",'YYYYMM'), -24) THEN 'Existing' 
               ELSE NULL END) "HISTORICAL_PURCHASE_FLAG"
    FROM
    (
        SELECT
        T1."REGION"
        , T1."COUNTRY"
        , T1."IDNum"
        , T1."CUSTOMER"
        , T1."BUSSINESS"
        , T3."FISCALYEARMONTH"
        , T3."FISCALYEAR"
        , T4."VALUE"
        , LAG ("FISCALYEARMONTH", 1) OVER (PARTITION BY T1."IDNum" ORDER BY T3."FISCALYEARMONTH" DESC) prev_fym 
        FROM
        "DATABASE"."SALES" T4
        , "DATABASE"."CUSTOMER" T1
        , "DATABASE"."PRODUCT" T2
        , "DATABASE"."TIME" T3
        WHERE
        T4."CUSTOMERID" = T1."CUSTOMERID"
        AND T4."PRODUCTID" = T2."PRODUCTID"
        AND T4."DATEID" = T3."DATEID"
        AND T1."COUNTRY" IN ('ENGLAND', 'France')
        AND T3."FISCALYEAR" IN ('2014','2015','2016')
    )
    WHERE "FISCALYEAR" IN ('2016')
    GROUP BY
    "REGION"
    , "COUNTRY"
    , "IDNum"
    , "CUSTOMER"
    , "BUSSINESS"
    , "FISCALYEARMONTH"
    , "FISCALYEAR"
    ;
    

提交回复
热议问题