इस तरह की आवश्यकता (जहां आपको एक कॉलम द्वारा अधिकतम या न्यूनतम की आवश्यकता होती है, दूसरे द्वारा समूहीकृत, लेकिन आपको अधिकतम या न्यूनतम पंक्ति से सभी डेटा की आवश्यकता होती है) विश्लेषणात्मक कार्य बहुत अधिक है इसलिए है। मैंने row_number
. का उपयोग किया है - यदि संबंध संभव हैं, तो आपको असाइनमेंट को स्पष्ट करने की आवश्यकता है (अपने प्रश्न के तहत मेरी टिप्पणी देखें), और विवरण के आधार पर, एक और विश्लेषणात्मक कार्य अधिक उपयुक्त हो सकता है - शायद rank()
।
with
my_table ( id, name, ref, dt, frm ) as (
select 10, 'Ant' , 100, date '2017-02-02', 'David' from dual union all
select 10, 'Ant' , 300, date '2016-01-01', 'David' from dual union all
select 2, 'Cat' , 90, date '2017-09-09', 'David' from dual union all
select 2, 'Cat' , 500, date '2016-02-03', 'David' from dual union all
select 3, 'Bird', 150, date '2017-06-28', 'David' from dual
)
-- End of simulated table (for testing purposes only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select id, name, ref, dt, frm
from (
select id, name, ref, dt, frm,
row_number() over (partition by id order by ref desc, dt desc) as rn
from my_table
)
where rn = 1
order by dt desc
;
ID NAME REF DT FRM
-- ---- --- ---------- -----
3 Bird 150 2017-06-28 David
2 Cat 500 2016-02-03 David
10 Ant 300 2016-01-01 David