Как получить максимальное количество строк для каждой группы / идентификатора в Oracle? - PullRequest
0 голосов
/ 27 мая 2020

6806969 3 6806969 1 6806969 2 7654392 1 7654392 2 У меня есть идентификатор, а в следующем столбце указано значение row_num. Как мне ввести следующее значение в таблицу таким образом, чтобы для идентификатора 6806969 следующее вставленное значение должно было быть 4, а для идентификатора 7654392 следующее вставленное значение должно быть 3. Пожалуйста, предложите любой способ. Я пробую max () с row_number, но это не дает желаемого результата.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вы можете сделать это одним оператором INSERT:

INSERT INTO table_name ( id, row_num )
SELECT id, row_num + 1
FROM   (
  SELECT id,
         row_num
  FROM   table_name
  WHERE  id = :your_id
  UNION ALL
  SELECT :your_id,
         0
  FROM   DUAL
  ORDER BY row_num DESC
)
WHERE ROWNUM = 1;

db <> fiddle

0 голосов
/ 27 мая 2020

Можно сделать процедуру

CREATE OR REPLACE PROCEDURE add_id (id_key NUMBER)
DECLARE prev_max NUMBER
BEGIN
   SELECT MAX(row_num) INTO prev_max FROM your_table WHERE id = id_key;
   INSERT INTO your_table(id, row_num) VALUES (id, prev_max + 1); 
EXCEPTION
  WHEN no_data_found THEN
     prev_max := 1;
     INSERT INTO your_table(id, row_num) VALUES (id, prev_max + 1);
END;

И называть ее так

BEGIN
   add_id(6806969);
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...