Oracle
 sql >> база данни >  >> RDS >> Oracle

как да напиша sql заявка за избиране на редове с максимална стойност в една колона

Този вид изискване (където имате нужда от максимума или минимума по една колона, групирани по друга, но имате нужда от всички данни от реда за максимум или минимум) е почти това, което аналитичните функции са за. Използвах 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да анализирате данни вътре в CDATA в oracle

  2. Oracle - Как да създадете потребител само за четене

  3. Oracle:как да групирате по диапазон?

  4. Oracle.DataAccess.dll не може да бъде намерен, въпреки че съществува

  5. как изглежда индекс на B-дърво на повече от 1 колона?