sql >> Database >  >> RDS >> Oracle

hoe sql-query te schrijven om rijen met maximale waarde in één kolom te selecteren

Dit soort vereisten (waarbij je de max of min per kolom nodig hebt, gegroepeerd op een andere, maar je hebt alle gegevens van de max- of min-rij nodig) is ongeveer wat analytische functies zijn voor. Ik gebruikte row_number - als verbanden mogelijk zijn, moet u de opdracht verduidelijken (zie mijn opmerking onder uw vraag), en afhankelijk van de details kan een andere analytische functie geschikter zijn - misschien 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


  1. Meerdere formulieren en één verwerkingspagina

  2. PHP Mysql PDO aantal gebonden variabelen komt niet overeen met aantal tokens

  3. TO_CHAR(datetime) Functie in Oracle

  4. Een overzicht van de Percona XtraDB Cluster Kubernetes-operator