I am having some trouble aggregating and using case within a group.
The objective is to check Indicator for each transaction key. If ‘1’ indicator exists then we have to select the max(Change_Date). If all zeros then min(Change_Date). Along with that the Initial_key associated with that Change_date has to be populated as a Final_key.
The output looks like this
Advertisement
Answer
You can get the last two columns using aggregation. If I understand correctly:
x
select trxn_key,
coalesce(max(case when indicator = 1 then change_date end),
min(change_date)
) as final_date,
coalesce(max(case when indicator = 1 then initial_key end),
min(initial_key)
) as final_key
from t
group by trxn_key;
Then join this in:
proc sql;
select t.*, tt.final_date, tt.final_key
from t join
(select trxn_key,
coalesce(max(case when indicator = 1 then change_date end),
min(change_date)
) as final_date,
coalesce(max(case when indicator = 1 then initial_key end),
min(initial_key)
) as final_key
from t
group by trxn_key
) tt
on tt.trxn_key = t.trxn_key;