आप अपने तर्क के आधार पर विभिन्न स्थितियों को "रैंक" कर सकते हैं और फिर उनमें से नवीनतम स्थिति चुन सकते हैं। आप नीचे दिए गए तर्क के समान तर्क का उपयोग कर सकते हैं, जो सभी "अस्वीकार" को नीचे धकेलता है।
सुनिश्चित करें कि आप अन्य सभी संभावित स्थितियों को शामिल करते हैं यदि आप उनमें से बाकी के लिए आदेश की परवाह करते हैं।
with t1 as
( select 1 id, 'Waiver Requested' status from dual union all
select 1 id, 'Rejected' status from dual union all
select 2 id, 'Waiver Requested' status from dual union all
select 2 id, 'Waiver Requested' status from dual union all
select 3 id, 'Rejected' status from dual union all
select 3 id, 'Rejected' status from dual union all
select 4 id, 'Waiver Requested' status from dual union all
select 4 id, 'Cancelled' status from dual
)
select id,
status,
max(status) KEEP (DENSE_RANK FIRST
order by (case when status ='Rejected' then -1
else 1
end) desc)
over (partition by id) final_status
from t1
ID STATUS FINAL_STATUS
---------- ---------------- ----------------
1 Waiver Requested Waiver Requested
1 Rejected Waiver Requested
2 Waiver Requested Waiver Requested
2 Waiver Requested Waiver Requested
3 Rejected Rejected
3 Rejected Rejected
4 Waiver Requested Waiver Requested
4 Cancelled Waiver Requested