2016-01-15 2 views
0

У меня есть SQL-запрос, который получает ордер с наибольшим количеством элементов. Я сделал это так:Как я могу получить PK Max Row в SQL

select max(ab.num) as anzahl 
    from (select auf.anr as anr,count(*) as num from 
     Auftrag auf, Table(auf.positionen) po group by auf.anr ) ab ; 

Мой результат выглядит следующим образом:

enter image description here

Я хочу знать, как получить заказ-ID [auf.anr] настоящего Порядка. Как я могу изменить свой запрос, чтобы получить желаемый результат?

Это Заказать Стол (Auftrag):

enter image description here

+1

Что такое 'Таблица (auf.positionen)'? Это не выглядит правильно –

+0

, который является массивом предметов заказа – user3232446

ответ

1

Один из способов сделать это было бы использовать row_number аналитическую функцию:

with cte as (
    select auf.anr as anr, 
     count(*) as num 
    from Auftrag auf, Table(auf.positionen) po 
    group by auf.anr 
) 
select anr 
    from (select anr, 
       row_number() over (order by num desc) as rn 
      from cte) 
where rn = 1 

... или, используя который предложил Хуан Карлос (с использованием rownum), это будет синтаксис:

with cte as (
    select auf.anr as anr, 
     count(*) as num 
    from Auftrag auf, Table(auf.positionen) po 
    group by auf.anr 
) 
select anr 
    from (select * 
      from cte 
     order by num desc) 
where rownum = 1 
+0

Спасибо, что работает! Великий!. не могли бы вы объяснить, почему вы это сделали? Это = – user3232446

+0

Я думаю, что немецкий код блокирует мой мозг и забыл 'row_number()'. Но я думаю, что OP должен рассматривать 'RANK()' в случае возможных связей. –

+1

Вам нужно будет сделать некоторые чтения, оракул может объяснить это раньше нас [ROW_NUMBER()] (https://docs.oracle.com/cd/ B19306_01/server.102/b14200/functions137.htm) и [RANK()] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm) –

Смежные вопросы