sql >> Database teknologi >  >> RDS >> Oracle

hvordan man skriver sql-forespørgsel for at vælge rækker med maks. værdi i én kolonne

Denne form for krav (hvor du har brug for maks. eller min. efter én kolonne, grupperet efter en anden, men du har brug for alle data fra maks. eller min. rækken) er stort set hvad analytiske funktioner er til. Jeg brugte row_number - hvis bindinger er mulige, skal du præcisere opgaven (se min kommentar under dit spørgsmål), og afhængigt af detaljerne kan en anden analytisk funktion være mere passende - måske 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. django.db.utils.OperationalError:(2013, Mistet forbindelse til MySQL-serveren ved 'håndtryk:læser initial kommunikationspakke', systemfejl:0)

  2. Vis flere poster i træk

  3. PLS-00539 og PLS-00538 fejl ved oprettelse af UDT-funktioner

  4. Definering af et tegnsæt for en kolonne Til oracle-databasetabeller